我最近实现了一个小的RecyclerView设置,并试用了recyclerview-selection库。到目前为止,选择工作正常,但我还在recyclerview项上连接了一个单击处理程序,现在每次我长按一个项以激活选择模式时,它也算作一个简单的点击,并且活动发生了变化(因为这就是我将其编程为在项目点击上执行)。我设法通过在recyclerview适配器中添加一个简单的布尔值来避免这种情况,选择模式开始时会调用该布尔值:
void setIgnoreClicks(boolean b) {
this.ignoreClicks = b;
}
,然后在我的视图持有者的绑定功能中:
void bind(MyModelClass m) {
...
view.setOnClickListener(() -> {
if(!adapter.isIgnoreClicks()) {
...
}
});
}
现在选择模式结束时,布尔值将重新设置为false,并且抽头会再次通过。
问题在于,当仅选中一项并单击以将其取消选中时,也会退出选择模式-很好,只是现在不再忽略该点击,因此活动发生了变化。我基本上想要的是也忽略最后一次点击。如果选择模式仍处于活动状态,是否可以通过某种方式停止事件?
谢谢
答案 0 :(得分:0)
好的,我自己解决了。我要做的是在我的recyclerview中添加一个触摸侦听器,如果actionmode处于活动状态且未单击任何项目,则将ignoreClick设置为true:
modelList.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {
if (e.getAction() != MotionEvent.ACTION_UP)
return false;
if(actionMode != null)
ignoreClick = rv.findChildViewUnder(e.getX(), e.getY()) != null; // ignore click if child is null (not clicked on a child, but the empty background of the recycler view)
return false;
}
...
});
然后在我的项目中单击处理程序:
private void showDetails(final Model model) {
if(ignoreClick)
ignoreClick = false; // the click is ignored, reset to false
else if (!selectionTracker.hasSelection()) {
final Intent intent = new Intent(MainActivity.this, ModelViewActivity.class);
intent.putExtra(Codes.DATA_MODEL, model);
startActivityForResult(intent, Codes.INTENT_MODEL_SHOW);
}
}