Recyclerview选择+可点击的项目

时间:2019-03-21 16:31:34

标签: java android android-recyclerview

我最近实现了一个小的RecyclerView设置,并试用了recyclerview-selection库。到目前为止,选择工作正常,但我还在recyclerview项上连接了一个单击处理程序,现在每次我长按一个项以激活选择模式时,它也算作一个简单的点击,并且活动发生了变化(因为这就是我将其编程为在项目点击上执行)。我设法通过在recyclerview适配器中添加一个简单的布尔值来避免这种情况,选择模式开始时会调用该布尔值:

void setIgnoreClicks(boolean b) {
    this.ignoreClicks = b;
}

,然后在我的视图持有者的绑定功能中:

void bind(MyModelClass m) {
    ...
    view.setOnClickListener(() -> {
        if(!adapter.isIgnoreClicks()) {
            ...
        }
    });
}

现在选择模式结束时,布尔值将重新设置为false,并且抽头会再次通过。

问题在于,当仅选中一项并单击以将其取消选中时,也会退出选择模式-很好,只是现在不再忽略该点击,因此活动发生了变化。我基本上想要的是也忽略最后一次点击。如果选择模式仍处于活动状态,是否可以通过某种方式停止事件?

谢谢

1 个答案:

答案 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);
    }
}