【问题标题】:How to Highlight the selected item in Recycler view如何在 Recycler 视图中突出显示所选项目
【发布时间】:2016-12-26 05:38:27
【问题描述】:

我正在尝试从 Recyclerview 中选择值,突出显示所选项目。我想改变背景颜色和文字颜色和图像。现在我正在使用以下代码。

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>

在 onBindViewHolder 上的 recyclerview 中

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) 突出显示行时如何更改文本和图像。

请告诉我解决这两个问题的任何想法。

【问题讨论】:

  • 在您的模型集变量中存储突出显示的信息。
  • 操作后调用 notifyItemChanged()
  • @Demo Mail.. notifyItemChanged() 不适用于我的场景..
  • @Divyesh.. 你能详细解释一下吗?请..
  • 您的模型包含所有项目的布尔字段,现在在您的 recyclerview onbindviewholder 方法中,检查布尔值,如果为真,则突出显示该项目。并在您的 Activity 类中,当单击项目时获取该项目位置并将该项目布尔值更改为 true。

标签: android android-recyclerview


【解决方案1】:

您可以将点击 position 保存在变量中,这样每当发生新点击时,您只需将变量值替换为新点击的位置,然后不要忘记使用 notifyItemChanged()强>;现在它在您的 bindview 中检查您选择的位置并更改项目的背景非常简单。

粗略的例子

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

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

【讨论】:

  • 它工作正常。资源xml还有其他方法可以使用吗?喜欢 selector.xml??
  • 看到这个stackoverflow.com/a/16976534/3863689如果你觉得这个答案有帮助请接受它。
【解决方案2】:

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

android:foreground="@drawable/xx_bg_sel" 我用它来让我的相册照片项目 pregress 或 fouce 可以在上面有一个面具。
希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2015-07-11
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 2018-11-25
    相关资源
    最近更新 更多