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