Recycler查看未正确更改的所选项目颜色



我陷入了这个问题。我的问题是,我实现了Recycler视图项的颜色更改点击。但当我选择第一个项目时,只有那个项目被选中了,它很好。但当选择第二项时,第一项和第二项被选中。当我选择第5项时,1,2&第5名被选中。我希望单击的行项目只被选中,而其他项目则不被选中。请帮忙。

我的代码(使用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()
}
}

最新更新