Android RecyclerView--SelectionTracker将选择大小限制为10项
我想将我的RecyclerViewAndroid RecyclerView--SelectionTracker将选择大小限制为10项,android,android-recyclerview,limit,selection,max-size,Android,Android Recyclerview,Limit,Selection,Max Size,我想将我的RecyclerViewSelectionTracker选择大小限制为10项(最多) SelectionTracker初始代码: val selectionTracker = SelectionTracker.Builder( "my_selection_tracker_id", myRecyclerView, MyItemKeyProvide
SelectionTracker
选择大小限制为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)} 因此,我从
SelectionPredicate
并添加检查项目下一状态(选中/取消选中)和选中项目大小的if条件 来自关于canSetStateForKey()的文档:
@如果{@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()
val selectionTracker=selectionTracker.Builder(
“我的\u选择\u跟踪器\u id”,
MyrView,
MyItemKeyProvider(),
MyItemLookup(myRecyclerView),
createParcelableStorage(MyItemModel::class.java)
).withSelectionPredicate(对象:SelectionTracker.SelectionPredicate(){
override fun canSelectMultiple():布尔值{
返回真值
}
override fun canSetStateForKey(键:AttachmentMediaModel,下一个状态:布尔):布尔{
如果(nextState&&selectionTracker.selection.size()>=10){//10-最大选择大小
return false//选择10项时无法选择
}
返回true//当选择大小小于10时-允许选择
}
override fun canSetStateAtPosition(位置:Int,下一个状态:Boolean):布尔{
返回真值
}
}).build()
我使用了这个选项,但我对它做了一点修改,跟踪器将取消选择最旧的选项,为新的选项“腾出空间”。类似(我的是java,我只使用long
键)
}
@Override
public boolean canSetStateForKey(@NonNull Long key, boolean nextState) {
if (nextState && tracker.getSelection().size() >= MAX_SELECTIONS) {
// Deselect the first selection and return true to allow the new item to be selected
tracker.deselect(tracker.getSelection().iterator().next());
}
return true;