Как не дать детектору жестов выполнить долгое нажатие одним нажатием при нажатии на элемент в представлении реселлера?
Прежде чем пометить этот вопрос как дубликат, обратите внимание, что я рассмотрел все решения подобных вопросов здесь, в 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
и отмените это там.