更改listView中所选项目的背景

时间:2018-08-30 15:08:49

标签: java android xml kotlin

我尝试更改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)
                }
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

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

  1. 创建变量lastClicked
  2. 在适配器的构造函数中,将该变量设置为-1,以使其不指向任何内容
  3. 每当单击 ListItem B时,将 lastClicked ListItem (在本例中为Item A)背景更改为原始背景,然后保存将 ListItem (项目B)的新位置移至selectedItem,并更改背景以显示新单击的 ListItem

答案 1 :(得分:0)

因为您没有将项目A设置为其原始颜色。单击项目B时,您需要d0 2件事。首先,将项目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();