2016-12-26 83 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能上有一个面具。
愿它能帮助你。

相关问题