回答
再次阅读SelectionTracker
文档后,我发现了这个:
为了限制可以选择的项目数,
请使用 {@link #canSetStateForKey(Object, boolean)} 和
{@link #canSetStateAtPosition(int, boolean)}。
因此,我从检查项目nextState (selected/deselected) 和selected items sizeoverride canSetStateForKey()
的方法中SelectionPredicate
添加if条件。
从有关 canSetStateForKey() 的文档中:
@return 如果 {@code id} 处的项目可以设置为 {@code nextState},则返回 true
将选择大小限制为 10 的条件:
if(nextState && selectionTracker.selection.size() >= 10) {
return false
} else {
return true
}
完整的 SelectionTracker 初始化:
val selectionTracker = SelectionTracker.Builder(
"my_selection_tracker_id",
myRecyclerView,
MyItemKeyProvider(),
MyItemLookup(myRecyclerView),
StorageStrategy.createParcelableStorage(MyItemModel::class.java)
).withSelectionPredicate(object : SelectionTracker.SelectionPredicate<AttachmentMediaModel>() {
override fun canSelectMultiple(): Boolean {
return true
}
override fun canSetStateForKey(key: AttachmentMediaModel, nextState: Boolean): Boolean {
if(nextState && selectionTracker.selection.size() >= 10) { // 10 - max selection size
return false // Can't select when 10 items selected
}
return true // When selection size < 10 - allow selection
}
override fun canSetStateAtPosition(position: Int, nextState: Boolean): Boolean {
return true
}
}).build()