Java 更改listView中选定项目的背景

Java 更改listView中选定项目的背景,java,android,xml,kotlin,Java,Android,Xml,Kotlin,当我试图更改列表视图中所选项目的背景时出现问题。当我选择项目A时,它的背景会改变。如果我选择项目B,它也会改变,但项目A不会回到默认背景 此可用于背景选定项目.xml的绘图: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true

当我试图更改
列表视图中所选项目的背景时出现问题。当我选择项目A时,它的背景会改变。如果我选择项目B,它也会改变,但项目A不会回到默认背景

此可用于
背景选定项目.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>
这是适配器中的
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)
                }
            }
        }
    }

您需要跟踪选择了哪个ListItem。 在适配器类中,创建一个变量来存储当前选定的ListItem

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

  • 因为您没有将项目A设置为其原始颜色。当你点击B项时,你需要做两件事。首先,将项目B设置为您想要的颜色,然后将项目A设置回其原始颜色。试试这个:

    if(kategoriList[adapterPosition] == kategori){
          itemView.isSelected = true
          itemView.txtView_kategori.setTextColor(Color.WHITE)
      } else {
          itemView.isSelected = false
          itemView.txtView_kategori.setTextColor(//any color you want)  
      }
    notifydatasetChanged();
    
    if(kategoriList[adapterPosition] == kategori){
          itemView.isSelected = true
          itemView.txtView_kategori.setTextColor(Color.WHITE)
      } else {
          itemView.isSelected = false
          itemView.txtView_kategori.setTextColor(//any color you want)  
      }
    notifydatasetChanged();