Существует более простой способ отключить прокрутку (технически это скорее перехват события прокрутки и завершение его при выполнении условия), используя только стандартные функции. 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если вы не хотите прокрутки?