Існує більш простий спосіб відключити прокрутку (технічно це скоріше перехоплення події прокрутки та припинення її, коли виконується умова), використовуючи просто стандартну функціональність. 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якщо ви не хочете прокручувати?