繁体   English   中英

更改listView中所选项目的背景

[英]Change background on selected item in listView

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

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

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

因为您没有将项目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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM