Я застрял в этой проблеме. Моя проблема в том, что я реализовал изменение цвета клика в представлении Recycler. Но когда я выбрал 1-й пункт, только тот, который был выбран и его хорошо. Но при выборе 2-го элемента, 1-й и 2-й элемент был выбран. Когда я выбрал 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>
Любая помощь будет глубоко оценили. Спасибо