I have a list with RecyclerView
+ Adapter
+ ViewHolder
and each item list contains a description and a CheckBox. If I select an item and scroll down the list RecyclerView does not keep the selection when I scroll up again.
Here is my code:
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var adapter: MyAdapter
private val items = mutableListOf<Item>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
adapter = MyAdapter()
binding.recyclerView.adapter = adapter
}
override fun onResume() {
super.onResume()
for (i in 1..100) {
items.add(Item("Item $i", false))
}
}
inner class MyAdapter : RecyclerView.Adapter<MyViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_layout, parent, false)
return MyViewHolder(view)
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val item = items[position]
holder.textView.text = item.description
holder.checkBox.isChecked = item.isSelected
holder.checkBox.setOnCheckedChangeListener {_, isChecked ->
item.isSelected = isChecked
holder.checkBox.isChecked = isChecked
}
}
override fun getItemCount(): Int {
return items.size
}
}
inner class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val textView: TextView = itemView.findViewById(R.id.textView)
val checkBox: CheckBox = itemView.findViewById(R.id.checkBox)
}
data class Item(val description: String, var isSelected: Boolean)
}