回收站查看所选项目颜色未正确更改

Recycler View selected item color not changing properly

我陷入了这个问题。我的问题是,我实现了 Recycler 查看项目点击的颜色变化。但是当我 selected 第一项时,只有 selected 并且它很好。但是当 select 第二项时,第一项和第二项得到了 selected。当我 select 编辑了第 5 项时,第 1,2 和第 5 项得到了 select 编辑。我希望单击的行项目只得到 selected 而其他人不。请帮忙。

我的代码(使用 Kotlin 和 MVVM)在这里,

class ItemAdapter() : RecyclerView.Adapter<ItemAdapter.DateViewHolder>() {

    private var ItemList: MutableList<ItemModel>? = ArrayList()
    private lateinit var ItemViewModel: ItemListBinding
    private lateinit var listener: OnItemClickListener

    init {
        this.ItemList = arrayListOf()
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DateViewHolder {
        ItemViewModel = DataBindingUtil.inflate(
            LayoutInflater.from(parent.context), R.layout.item_list,
            parent, false
        )
        return DateViewHolder(ItemViewModel)
    }

    override fun onBindViewHolder(holder: DateViewHolder, position: Int) {
        holder.bindItemDetail(ItemList!![position])
    }

    override fun getItemCount(): Int {
        return ItemList!!.size
    }

    fun setItemList(List: MutableList<ItemModel>) {
        this.ItemList = List
        notifyDataSetChanged()
    }

    fun setListener(listener: OnItemClickListener) {
        this.listener = listener
    }

    fun removeAt(selectedPos: Int) {
        ItemList?.removeAt(selectedPos)
        notifyItemRemoved(selectedPos)
    }


    inner class DateViewHolder(private var itemDetailBinding: ItemListBinding) :
        RecyclerView.ViewHolder(itemDetailBinding.root) {

        fun bindItemDetail(ItemResponse: ItemModel) {

            if (itemDetailBinding.ItemDetailModel == null) {
                itemDetailBinding.ItemDetailModel =
                    ItemDetailViewModel(ItemResponse, itemView.context)
            } else {
                itemDetailBinding.ItemDetailModel!!.setDetail(ItemResponse)
                itemDetailBinding.executePendingBindings()
            }

            itemDetailBinding.root.Detail.setOnClickListener {
                if(position == adapterPosition) {
                    itemDetailBinding.root.itemDescp.setTypeface(Typeface.DEFAULT_BOLD)
                    itemDetailBinding.root.Detail.setBackgroundResource(R.color.colorGreyLight)
                    itemView.isSelected = false
                } else {
                    itemDetailBinding.root.itemDescp.setTypeface(Typeface.DEFAULT)
                    itemDetailBinding.root.Detail.setBackgroundResource(R.color.colorWhite)
                    itemView.isSelected = true
                }
                notifyDataSetChanged()
            }

        }
    }
}

xml 在这里

  <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/Detail"
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:layout_marginTop="2dp"
            android:layout_marginBottom="2dp"
            android:background="@color/colorWhite">

            <TextView
                android:id="@+id/itemDescp"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginLeft="5dp"
                android:layout_marginTop="1dp"
                android:layout_marginEnd="60dp"
                android:ellipsize="end"
                android:maxLines="1"
                android:text="@{ItemDetailModel.description}"
                android:textAlignment="textStart"
                app:layout_constraintRight_toLeftOf="@+id/qtyValue"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />

            <EditText
                android:id="@+id/qtyValue"
                android:layout_width="40dp"
                android:layout_height="25dp"
                android:layout_marginRight="3dp"
                android:background="@drawable/edit_shape"
                android:maxLines="1"
                android:paddingLeft="5dp"
                android:paddingTop="3dp"
                android:paddingRight="7dp"
                android:paddingBottom="3dp"
                android:text="@{ItemDetailModel.quantity}"
                android:textAlignment="textEnd"
                android:textSize="16sp"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintTop_toTopOf="parent" />

        </androidx.constraintlayout.widget.ConstraintLayout>

如有任何帮助,我们将不胜感激。谢谢

添加

private var selectedItemPosition = -1

然后

inner class DateViewHolder(private var itemDetailBinding: ItemListBinding) :
    RecyclerView.ViewHolder(itemDetailBinding.root) {

    fun bindItemDetail(ItemResponse: ItemModel) {

        if (itemDetailBinding.ItemDetailModel == null) {
            itemDetailBinding.ItemDetailModel =
                ItemDetailViewModel(ItemResponse, itemView.context)
        } else {
            itemDetailBinding.ItemDetailModel!!.setDetail(ItemResponse)
            itemDetailBinding.executePendingBindings()
        }
        if(position == selectedItemPosition) {
            itemDetailBinding.root.itemDescp.setTypeface(Typeface.DEFAULT_BOLD)
            itemDetailBinding.root.Detail.setBackgroundResource(R.color.colorGreyLight)
            itemView.isSelected = true
        } else {
            itemDetailBinding.root.itemDescp.setTypeface(Typeface.DEFAULT)
            itemDetailBinding.root.Detail.setBackgroundResource(R.color.colorWhite)
            itemView.isSelected = false
        }

        itemDetailBinding.root.Detail.setOnClickListener {
            selectedItemPosition = position
            notifyDataSetChanged()
        }

    }