Ada cara yang lebih mudah untuk menonaktifkan pengguliran (secara teknis ini lebih tepatnya mencegat peristiwa pengguliran dan mengakhirinya ketika suatu kondisi terpenuhi), hanya menggunakan fungsionalitas standar. RecyclerView
memiliki metode yang dipanggil addOnScrollListener(OnScrollListener listener)
, dan hanya dengan ini Anda dapat menghentikannya dari menggulir, seperti:
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (viewModel.isItemSelected) {
recyclerView.stopScroll();
}
}
});
Kasus penggunaan:
Katakanlah Anda ingin menonaktifkan pengguliran ketika Anda mengklik salah satu item di dalamnya RecyclerView
sehingga Anda dapat melakukan beberapa tindakan dengannya, tanpa terganggu dengan menggulir secara tidak sengaja ke item lain, dan ketika Anda selesai melakukannya, cukup klik pada item lagi untuk mengaktifkan gulir. Untuk itu, Anda ingin melampirkan OnClickListener
ke setiap item di dalamnya RecyclerView
, jadi ketika Anda mengklik item, itu akan beralih isItemSelected
dari false
ke true
. Dengan cara ini ketika Anda mencoba untuk menggulir, RecyclerView
akan secara otomatis memanggil metode onScrollStateChanged
dan sejak isItemSelected
diatur ke true
, itu akan segera berhenti, sebelum RecyclerView
mendapat kesempatan, yah ... untuk menggulir.
Catatan: untuk kegunaan yang lebih baik, coba gunakan GestureListener
alih-alih OnClickListener
untuk mencegah accidental
klik.
RecyclerView
jika Anda tidak ingin menggulir?