android - RecyclerView --SelectionTracker 将选择大小限制为 10 个项目
问题描述
我想将我的 RecyclerViewSelectionTracker
选择大小限制为 10 个项目(最大)。
SelectionTracker 初始化代码:
val selectionTracker = SelectionTracker.Builder(
"my_selection_tracker_id",
myRecyclerView,
MyItemKeyProvider(),
MyItemLookup(myRecyclerView),
StorageStrategy.createParcelableStorage(MyItemModel::class.java)
).withSelectionPredicate(SelectionPredicates.createSelectAnything())
.build()
解决方案
回答
再次阅读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()
推荐阅读
- python - 使这个输入函数更快
- ruby-on-rails - OpenSSL::SSL::SSLError 异常:每次调用 Pusher 时版本号错误
- python - 如何将stdout和stderr重定向到socket.send全局python
- javascript - 在我的 2D javascript 游戏中跳跃、移动和重力
- arrays - 为什么我不能为结构变量分配相同类型结构的数组的元素?
- php - 未在服务帐户谷歌日历 api php 中创建环聊链接
- c - 我在让 MergeSort 在 C 中工作时遇到问题
- kubernetes - Prometheus kuberentes-pods Get "https://xx.xx.xx:443 /metrics": dial tcp xx.xx.xx:443: connect: connection denied
- vimeo - 如何在嵌入的 Vimeo 视频中隐藏广告/链接
- java - 如何在 Java 中使用 lambda 打印字符串数组列表