防止CardView内部的RecyclerView拦截触摸

时间:2019-04-17 19:47:11

标签: android android-recyclerview onclicklistener android-cardview materialcardview

我在MaterialCardView内有一个RecyclerView,此卡有许多其他视图。

RecyclerView项不可单击,唯一目的是显示列表中的一些数据。当我单击MaterialCardView时,我必须导航到另一个屏幕。如果我触摸RecyclerView区域以外的任何地方,就会发生波纹效应,并导航到另一个屏幕。但是,如果我单击RecyclerView,则什么也不会发生。

我怀疑视图正在拦截触摸事件,阻止了卡消耗点击,但是找不到找到使之起作用的方法。

相对于我尝试过的RecyclerView:

recyclerView.setOnCLickListener(v -> card.callOnClick())
recyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
            @Override
            public boolean onInterceptTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {
                if (e.getAction() == MotionEvent.ACTION_DOWN) {
                    card.callOnClick();
                }
                return false;
            }

            @Override
            public void onTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {
            }

            @Override
            public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

            }
        });

如果我在'onItemTouchListener'内调用'card.callOnClick()'或'card.performClick()'可以正常工作,但没有发生涟漪效应,那似乎不是自然的点击。

我希望RecyclerView不会拦截点击/触摸并让父卡处理这些事件。

1 个答案:

答案 0 :(得分:0)

在更新适配器数据后,我设法通过使用recyclerView.setLayoutFrozen(true)实现了预期的行为。