Что я буду предлагать, так это.
-> Предположим, у вас есть данные для Recyclerview, такие как RecyclerItemData, он должен иметь один логический флаг, isSelected
-> isSelected = true (выбранный фон Видимый)
-> isSelected = false (невыбранный задний фон видим)
-> Сейчас, когда пользователь щелкает по элементу утилизатора, передает идентификатор RecyclerItemData для выбранного элемента в вашу деятельность через интерфейс метода. (ItemClicked (String id)).
-> Теперь l oop весь список, а для всего списка сделайте isSelected = false, за исключением элемента с заблокированным идентификатором (поскольку он делает его истинным).
-> Теперь вызовите adapter.notifydatasetchanged ()
//In onBindViewHolder() you should have code to handle isSelected flag,
if(isSelected){
// Show selected background
}else{
// Show unselected background
}
Изменения, необходимые в вашем репо ..
https://github.com/Larrsenn/RecyclerViewTest/blob/master/app/src/main/java/dk/larsen/testrecyclerview/MovieCategory.kt
data class MovieCategory(val id: Int, val title: String, var isSelected: Boolean)
При подготовке списка в методе addDataToRecycelrView () здесь https://github.com/Larrsenn/RecyclerViewTest/blob/master/app/src/main/java/dk/larsen/testrecyclerview/MainActivity.kt
установить значение по умолчанию для isSelected равным false для каждого элемента ..
В классе адаптера
fun bind(item: MovieCategoryItemViewModel) = with(itemView) {
itemView.setOnClickListener {
interaction?.onMovieCategoryItemSelected(item)
// itemView.isSelected = true // remove this line..
}
В адаптере можно изменить это на M ovieCategory из интерфейса MovieCategoryItemViewModel Взаимодействие {fun onMovieCategoryItemSelected (item: MovieCategory)}}
В MainActivity в методе onMovieCategoryItemSelected
override fun onMovieCategoryItemSelected(selectedItem:MovieCategory) {
// iterate current list of the adapter
check for the item in the list where id == selectedItem
for this item set iselected = true
else false
now call diffutils update
}