Вы создаете свой собственный SelectionTracker.SelectionPredicate<Long>
.
Переопределите метод canSetStateForKey(key: Long, nextState: Boolean)
следующим образом:
override fun canSetStateForKey(@NonNull key: Long, nextState: Boolean): Boolean {
rv.findViewHolderForItemId(key)?.let { holder -> adapter.canSetStateForItem(holder as YourItemHolder<YourItem>, nextState)}
return true
}
и в вашем ViewHolder
проверьте, если элемент уже выбран, если так return false
или наоборот наоборот.
Редактировать:
Вы также можете определить «Точку выбора» с помощью inSelectionHotspot(e: MotionEvent)
в вашем ItemDetailsLookup.ItemDetails
.
В вашем ViewHolder
, то вы можете проверить, находится ли TouchEvent
в области, которая требует выбора или отмены выбора.
, например:
override fun inSelectionHotspot(e: MotionEvent): Boolean {
val rect = Rect()
itemView.getGlobalVisibleRect(rect)
if (rect.contains(e.rawX.toInt(), e.rawY.toInt())) {
// in select region
} else {
// not in select region
}
}