Предотвращение повторного просмотра внутри CardView от перехвата касания

#android #android-recyclerview #onclicklistener #android-cardview #materialcardview

#Android #android-recyclerview #onclicklistener #android-cardview #материальный вид карты

Вопрос:

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

Элементы 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) {

            }
        });
 

Если я вызываю ‘card.callOnClick ()’ или ‘card.performClick ()’ внутри ‘onItemTouchListener’, это работает, но эффекта пульсации не происходит, это не похоже на естественный щелчок.

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

Ответ №1:

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