【问题标题】:Set the state of an item in a RecyclerView selected when click on it设置单击时选中的 RecyclerView 中的项目的状态
【发布时间】:2015-06-24 01:31:29
【问题描述】:

我认为这很容易实现,但经过数小时的搜索,我找不到有用的东西来让它工作。 我想设置用户在抽屉中单​​击的项目,这个列表是一个 RecyclerView。在我的适配器的 ViewHolder 中,我有一个项目的 onClick 事件:

@Override
public void onClick(View v) {
   notifyItemChanged(selectedItem);
   selectedItem = getPosition();
   notifyItemChanged(selectedItem);
}

selectedItem 是一个用于跟踪所选项目的 int。

现在在 onBindViewHolder 我这样做:

holder.itemView.setSelected(position == selectedItem);

但似乎从未调用过所选状态,因为我将 android:background 设置为包含此内容的项目行:

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

正常状态是工作,所以我知道背景应用得很好。

那么,如何将选中状态设置为 RecyclerView 中的项目?

【问题讨论】:

    标签: android android-recyclerview selecteditem


    【解决方案1】:

    对于那些将 RecyclerView 与包含 TextView 的项目一起使用的人。

    这将允许TextView 获得焦点状态:

    android:duplicateParentState="true"
    

    【讨论】:

      【解决方案2】:

      好吧,在深入挖掘并尝试了解 android 从 xml 实现样式的方式之后,我发现要更改特定 TextView 中的文本颜色(我在问题中没有告诉的内容)必须设置属性android:color="@drawable/bg_item"(bg_item 是包含选择器的文件,并且在每个项目中都有属性 android:color),如下所示:

      <?xml version="1.0" encoding="utf-8"?>
      <selector xmlns:android="http://schemas.android.com/apk/res/android">
          <item
              android:state_selected="true"
              android:drawable="@drawable/border_bottom_selected"
              android:color="@color/backgroundToolbar" />
          <item android:drawable="@drawable/border_bottom"
              android:color="@color/colorTextTitleTab"/>
      </selector>
      

      【讨论】:

        【解决方案3】:

        从视图持有者中移除 onclick 监听器。

        在 onBindViewHolder 中这样做:

        viewHolder.itemView.setOnClickListener(new OnClickListener()
            {
        
                @Override
                public void onClick(View v)
                {
                    // TODO Auto-generated method stub
                    notifyItemChanged(selectedItem);
                    selectedItem = position;
                    notifyItemChanged(selectedItem);
                }
            });
            holder.itemView.setSelected(position == selectedItem);
        

        我希望这可以解决您的问题。

        【讨论】:

        • 没什么,项目选择状态也没有显示。
        猜你喜欢
        • 1970-01-01
        • 2019-09-27
        • 2020-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多