如何在Recyclerview中使用SelctionTracker禁用拖动到选择



我正在使用SelectionTracker.Builder在RecyclerView中多选项目。但在选择第一个项目后,SelectionTracker也会在拖动时选择其他项目。我想禁用拖动选择功能,只保留单击选择多个项目。有什么办法吗?

.withSelectionPredicate(new SelectionTracker.SelectionPredicate<String>() {
@Override
public boolean canSetStateForKey(@NonNull String key, boolean nextState) {
return true;
}
@Override
public boolean canSetStateAtPosition(int position, boolean nextState) {
return true;
}
@Override
public boolean canSelectMultiple() {
return true;
}   
}).build();

我尝试了SelectionPredicate,但这也将可以选择的项目数量限制为1。

据说有BandSelectionPredicate,但它似乎不起作用。

.withBandPredicate(object : BandPredicate() {
override fun canInitiate(e: MotionEvent): Boolean = false
})

因此,我的解决方法是检查OperationsMonitor.isStarted在自定义SelectionPredicate 中的状态

val operationMonitor = OperationMonitor()
.withOperationMonitor(operationMonitor)
.withSelectionPredicate(object :
SelectionTracker.SelectionPredicate<String>() {
override fun canSelectMultiple(): Boolean = true
override fun canSetStateAtPosition(position: Int, nextState: Boolean): Boolean {
if (operationMonitor.isStarted) return false

// rest of logic, then eventually
return true
}
override fun canSetStateForKey(key: String, nextState:Boolean): Boolean {
if (operationMonitor.isStarted) return false

// rest of logic, then eventually
return true
}
})

这帮了我

@Override
public boolean canSetStateForKey(@NonNull Long key, boolean nextState) {
return true;
}
@Override
public boolean canSetStateAtPosition(int position, boolean nextState) {
return false;
}
@Override
public boolean canSelectMultiple() {
return true;
}

最新更新