Существует более простой способ отключить прокрутку (технически это скорее перехват события прокрутки и завершение его при выполнении условия), используя только стандартные функции. RecyclerView
вызвал метод addOnScrollListener(OnScrollListener listener)
, и с помощью этого вы можете остановить прокрутку, просто так:
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (viewModel.isItemSelected) {
recyclerView.stopScroll();
}
}
});
Случай использования:
допустим, вы хотите отключить прокрутку, когда нажимаете на один из элементов внутри, RecyclerView
чтобы вы могли выполнять с ним некоторые действия, не отвлекаясь на случайную прокрутку на другой элемент, и когда вы закончите с этим, просто нажмите элемент снова, чтобы включить прокрутку. Для этого вы хотите прикрепить OnClickListener
к каждому элементу внутри RecyclerView
, поэтому, когда вы нажимаете на элемент, он переключается isItemSelected
с false
на true
. Таким образом, когда вы попытаетесь прокрутить, RecyclerView
автоматически вызовет метод onScrollStateChanged
и, так как isItemSelected
установлено значение true
, он остановится немедленно, доRecyclerView
возможность, ну ... прокрутить.
Примечание: для удобства использования старайтесь использовать GestureListener
вместо того, OnClickListener
чтобы предотвращать accidental
щелчки.
RecyclerView
если вы не хотите прокрутки?