首页 > 解决方案 > 更改列表视图中所选项目的背景

问题描述

当我尝试更改listview. 当我选择项目 A 时,它的背景发生了变化。如果我选择项目 B,它也会改变,但项目 A 不会恢复为默认背景。

这个可绘制用于background selected_item.xml

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

这是 XML item_kategori.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/lay_nama_kategori"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"
    android:orientation="vertical"
    android:background="@drawable/selected_item">

    <TextView
        android:id="@+id/txtView_kategori"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:textAllCaps="false"
        android:textColor="@color/colorMegna"
        android:layout_marginStart="10dp"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"/>

</LinearLayout>

这是setOnClickListener()适配器:

inner class CategoryViewHolder(itemView: View): RecyclerView.ViewHolder(itemView){
    fun bind(kategori: Category){
            itemView.txtView_kategori.text = kategori.category
            itemView.setOnClickListener {

                if(kategoriList[adapterPosition] == kategori){
                    itemView.isSelected = true
                    itemView.txtView_kategori.setTextColor(Color.WHITE)
                }
            }
        }
    }

标签: javaandroidxmlkotlin

解决方案


您需要跟踪选择了哪个ListItem。在您的 Adapter 类中,创建一个存储当前ListItem的变量,该变量被选中

  1. 创建你的变量lastClicked
  2. 在适配器的构造函数中,将该变量设置为 -1,这样它就不会指向任何东西
  3. 每当您单击ListItem B 时,将lastClicked ListItem(在本例中为 Item A)背景更改为原始,然后将新的ListItem(项目 B)位置保存到selectedItem并更改背景以显示新单击的ListItem

推荐阅读