Отмена выбора других элементов в окне повторного использования при выборе нового элемента - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть список категорий в горизонтальном виде переработчика. Я сделал селектор в качестве фона, который меняет цвет на элементе, когда он выбран или нет. Но я хочу сделать это так, когда я нажимаю на новый элемент, старый выбранный элемент становится невыбранным. Как бы я это сделал? Я сделал репозиторий GIT, описывающий мою проблему здесь:

https://github.com/Larrsenn/RecyclerViewTest

РЕДАКТИРОВАТЬ: После предложения поставить isSelected в качестве логического флага на мой ItemViewModel, теперь он также иногда обновляет другие элементы, на которые я не нажимал. Я обновил git -repo, чтобы вы могли видеть, как он работает.

1 Ответ

1 голос
/ 15 апреля 2020

Что я буду предлагать, так это.

-> Предположим, у вас есть данные для 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
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...