Recyclerview选择+可点击的项目

问题描述 投票:0回答:1

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

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

然后在我的viewholder的bind-function中:

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

现在当选择模式结束时,布尔值被设置回假,并且点击再次通过。

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

谢谢

java android android-recyclerview
1个回答
0
投票

好的,我自己解决了。我所做的是在我的recyclerview中添加一个触摸监听器,如果操作模式处于活动状态且没有单击任何项​​目,则设置忽略Click to 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);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.