Предотвратить перехват RecyclerView внутри CardView от прикосновения - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть RecyclerView внутри MaterialCardView, и у этой карты есть куча других представлений.

Элементы RecyclerView не активируются, единственная цель - показать некоторые данные из списка.Когда я нажимаю MaterialCardView, я должен перейти к другому экрану.Если я касаюсь где-либо за пределами области RecyclerView, возникает эффект Ripple, и я перехожу на другой экран. Однако, если я нажимаю на 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) {

            }
        });

Если явызов 'card.callOnClick ()' или 'card.performClick ()' внутри 'onItemTouchListener' с ним работает, но эффект Ripple не происходит, он не выглядит как естественный щелчок.

Я хочуRecyclerView, чтобы не перехватывать нажатие / касание и позволить родительской карте обрабатывать эти события.

1 Ответ

0 голосов
/ 17 апреля 2019

Мне удалось добиться желаемого поведения с помощью recyclerView.setLayoutFrozen(true) после обновления данных адаптера.

...