2016-12-26 116 views
0

我想從Recyclerview中選擇值突出顯示所選項目。我想更改bg顏色和文字顏色和圖像。現在我正在使用下面的代碼。如何突出顯示Recycler視圖中的選定項目

selector_row

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@android:color/darker_gray" android:state_pressed="false" android:state_selected="true" /> 
    <item android:drawable="@color/store_search_list_item_background"/> 
</selector> 

在recyclerview上onBindViewHolder

holder.itemView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if (selectedItems.get(position, false)) { 
        selectedItems.delete(position); 
        holder.itemView.setSelected(false); 
       } 
       else { 
        selectedItems.put(position, true); 
        holder.itemView.setSelected(true); 
       } 
      } 
     }); 

現在我可以突出顯示所選行。我的問題是 1)當我選擇另一行時,它也被突出顯示。我只想突出顯示一行。如果用戶選擇另一行前一行不應突出顯示。

2)突出顯示行時如何更改文本和圖像。

請讓我有任何想法來解決這兩個問題。

+1

在您的模型集變量中存儲突出顯示的信息。 –

+0

在操作後調用notifyItemChanged() –

+0

@Demo Mail .. notifyItemChanged()不適用於我的場景.. – Vijay

回答

2

可以節省點擊位置在一個變量所以每當新的點擊情況,您只需用新的點擊位置更換您的變量值,之後別忘了用notifyItemChanged();現在它非常簡單,在你的bindview檢查你所選的位置並改變物品的背景。

rough ex。

onClick(){ 
    highlightedPosition = getLayoutPostion(); 
    notifyItemChanged(); 
    } 

    onBindView(int position){ 
    if(highlightedPosition == position){ 
    higlightedBackground(); 
    }else{ 
    normalBackground(); 
    } 
+0

它的工作。有沒有其他的方式來使用資源XML?像selector.xml? – Vijay

+0

看到這個http://stackoverflow.com/a/16976534/3863689如果你覺得這個答案有幫助,請接受它。 – Spartan

0

android:clickable="true" android:focusable="true" android:focusableInTouchMode="true" android:foreground="@drawable/xx_sel"

android:foreground="@drawable/xx_bg_sel" 我用它讓我的相冊照片項目pregress或fouce能上有一個面具。
願它能幫助你。

相關問題