簡體   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