2014-07-08 74 views
1

默認情況下,我需要在水平列表視圖中突出顯示一個項目,並且當用戶在水平列表視圖中選擇另一個項目時,我想突出顯示該項目(先移除並突出顯示當前選定的),對於我正在用下面的代碼試圖在我的適配器在水平列表視圖中突出顯示選定的項目

適配器: -

int selectedIndex; 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View v = convertView; 
    v = LayoutInflater.from(parent.getContext()).inflate(
     R.layout.hlist_rowitem, null); 

    if (position == selectedIndex) { 
    v.setBackgroundColor(Color.parseColor("#abcdef")); 
} 
} 

,並從列表視圖如何在活動做改變從活動選擇中的其他項目後突出顯示該項目的位置。

活動: -

int sIndex; 
sIndex = getIntent().getIntExtra("POSITION", 0); 
hlAdapter = new HSelectedAdapter(InsuranceCard.this, rowItems, sIndex); 
hListView.setAdapter(hlAdapter); 
hListView.setOnItemClickListener(new OnItemClickListener() { 
@Override 
public void onItemClick(AdapterView<?> parent, View view,int position, long id) { 
//other code goes here 
} 
}); 

回答

0

附加listitemclick.xml 在drawblw文件夾這是代碼。 2)然後在你的hlist_rowitem.xml組後臺= 「@繪製/ listitemclick」

+0

那麼如何刪除早期選擇的項目? – Harish

2

我會用一個color state list resource,並有ListView控件處理選擇與setSelection(position)

顏色列表中會是這個樣子:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" 
      android:color="#aabbcc"/> <!-- pressed --> 
    <item android:state_activated="true" 
      android:color="#fedcba"/> <!-- selected --> 
    <item android:color="#abcdef"/> <!-- default --> 
</selector> 

,它應被設置爲R.layout.hlist_rowitem的背景或爲listSelector的列表視圖。

編輯: 接收click事件時更改的選擇:

hListView.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view,int position, long id) { 
     hListView.setSelection(position); 
    } 
}); 

ListView控件將取消舊的/默認的項目,並在指定位置選擇新的項目。

編輯2:默認情況下ListView控件沒有選擇模式設置,以便確保您將它設置爲XML或代碼:listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

+0

那麼如何刪除早期選擇的項目? – Harish

+0

你沒有了:) ListView僅突出顯示一個選定的項目,因此每次選擇新項目時都會取消選擇舊項目。 – Delblanco

+0

如果你在上面觀察我的問題,我將默認項目設置爲選中狀態,現在問題是刪除默認選項並應用新的選定項目。 – Harish

1

您可以通過兩種方式實現這一目標。

  1. 手工清除onItemClick選擇的所有項目和set()

    listview.setOnItemClickListener(new OnItemClickListener() { 
    
        @Override 
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
          long arg3) { 
    
         for (int i = 0; i < adapter.getCount(); i++) { 
         View item = listview.getChildAt(i); 
         if (item != null) { 
          item.setBackgroundResource(R.drawable.unselected); 
         } 
         arg1.setBackgroundResource(R.drawable.selected); 
        } 
    
        } 
    }); 
    
  2. 使用選擇,讓列表視圖做本身。

/drawable/selector_list.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:drawable="@drawable/selected" android:state_selected="true"/> 
    <item android:drawable="@drawable/selected" android:state_activated="true"/> 
    <item android:drawable="@drawable/unselected"/> 

</selector> 

,並添加android:listSelector="@drawable/selector_list"到你的ListView

+0

需要顯示一個項目,因爲它是默認選擇,並且當用戶根據更改選擇而改變時。 – Harish

+0

使用此[如何以編程方式點擊ListView項目](http://stackoverflow.com/a/16278023/1608643) –

+0

嘿謝謝你的回答它的工作。但是當我點擊第一個滾動然後最後一個項目也被選中。當我第二項選擇,然後選擇兩項中的最後一項。 –

0

請按照下列步驟操作: 1)聲明一個布爾數組。 public static boolean ClickItem []; 2)inside oncreate ClickItem = new boolean [your array size]; 數組。填充(ClickItem,false);

在適配器中寫入該代碼 一個)
如果ClickItem [POS] { v.setBackgroundColor(Color.parseColor( 「#ABCDEF」)); }其他

一) v.setOnClickListener(新OnClickListener(){

 @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

     Arrays.fill(ClickItem, false); 
      ClickItem[pos]=true; 

      adapter1.notifyDataSetChanged(); 


     } 
    }); 
+0

1)它不是多重選擇2)什麼是arrays.fill()以及如何讓它進入適配器。 – Harish

相關問題