Как отменить выбор всех выбранных элементов в SelectionTracker RecyclerView, даже если некоторые элементы прокручиваются за пределы экрана? - PullRequest
0 голосов
/ 13 июня 2019

Я использую SelectionTracker для реализации множественного выбора RecyclerView. функция выбора / отмены выбора работает, как и ожидалось, если я делаю это вручную (элемент отображается на экране, и я изменяю его состояние, нажимая), но если я пытаюсь отменить выбор всех элементов, некоторые из которых не отображаются на экране, с помощью метода выбора отслеживания clearSelection, его отменяет выбор только тех элементов, которые в данный момент видны на экране.

Вот как я строю SelectionTracker

tracker = SelectionTracker.Builder<Long>(
            "mySelection",
            recyclerView,
            MyKeyProvider(recyclerView),
            MyItemDetailsLookup(recyclerView),
            StorageStrategy.createLongStorage()
        ).withSelectionPredicate(
            SelectionPredicates.createSelectAnything()
        ).build()
recyclerAdapter.tracker = tracker

Ниже приведены методы bindItem и onBindViewHolder для ViewHolder и адаптера соответственно

fun bindItems(model: Model, isActivated: Boolean) {
            itemView.isActivated = isActivated
            if(itemView.isActivated){
                /* Make item selected. (make background dark) */
            }
            else{
                /* Make item unselected. (Apply original background) */
            }
        }
    }

override fun onBindViewHolder(holder: RecyclerAdapter.ViewHolder, position: Int) {
        val number = displayList[position]
        tracker?.let {
            holder.bindItems(number, it.isSelected(position.toLong()))
        }
    }

Я вызываю метод четкого выбора по нажатию пункта меню

override fun onOptionsItemSelected(item: MenuItem?): Boolean {
        if((selectionMode) && (item?.itemId==android.R.id.home)){
            tracker.clearSelection()
        }
        return super.onOptionsItemSelected(item)
    }
...