Я использую 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)
}