Как не дать детектору жестов выполнить долгое нажатие одним нажатием при нажатии на элемент в представлении реселлера?

Прежде чем пометить этот вопрос как дубликат, обратите внимание, что я рассмотрел все решения подобных вопросов здесь, в Stackru, и они не сработали.

Ниже описан процесс, в котором я реализовал детектор жестов. Вы увидите, что в закрытом классе, который расширяет GestureDetector.SimpleOnGestureListener, я создал код только для длинного нажатия, но код, содержащийся в onLongPress, также срабатывает одним нажатием.

Класс реализует OnItemTouchListsner см. Код ниже

public class MyFragment extends Fragment implements RecyclerView.OnItemTouchListener

Я создаю личную переменную, см. Код ниже

private GestureDetectorCompat gestureDetector;

Я назначаю gestDetector в onCreateView см. Код ниже

gestureDetector = new GestureDetectorCompat(getActivity().getApplicationContext(), new RecyclerViewOnGestureListener());

Я реализую необходимые методы для OnItemTouchListener см. Код ниже

@Override
        public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
            gestureDetector.onTouchEvent(e);
            return false;
        }

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

    } 

Я создаю приватный класс для слушателя жестов, см. Код ниже

private class RecyclerViewOnGestureListener extends GestureDetector.SimpleOnGestureListener {

            @Override
            public void onLongPress(MotionEvent e) {
                //code in here executes on single tap, but should only execute on long press
                super.onLongPress(e);
            }
        }

2 ответа

Что вызвало проблему

Я использовал RecyclerItemClickListener (см. Ссылку на страницу github), и из-за этого я не мог использовать longpress, поскольку код внутри longpress должен был выполняться внутри фрагмента.

Итак, у меня был реализован мой фрагмент OnItemTouchListener и установить recyclerview.addOnItemTouchListener(this), Я включил код только для длинного нажатия в мой фрагмент. Я также установил recyclerview.addOnItemTouchListener в RecyclerItemClickListener,

Что вызвало проблему: установка onItemTouchListener для утилита просмотра дважды.

Решение: сделать RecyclerItemClickListener внутренним классом.

Попытка переопределения RecyclerView#requestDisallowInterceptTouchEvent и отмените это там.

Другие вопросы по тегам