【问题标题】:Change background on selected item in listView更改列表视图中所选项目的背景
【发布时间】:2018-08-30 15:08:49
【问题描述】:

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

background selected_item.xml的这个drawable:

<?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)
                }
            }
        }
    }

【问题讨论】:

    标签: java android xml kotlin


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-29
        • 1970-01-01
        • 2016-01-15
        • 1970-01-01
        相关资源
        最近更新 更多