Có một cách đơn giản hơn để vô hiệu hóa cuộn (về mặt kỹ thuật, nó đúng hơn là chặn sự kiện cuộn và kết thúc khi điều kiện được đáp ứng), chỉ sử dụng chức năng tiêu chuẩn. RecyclerView
có phương thức được gọi addOnScrollListener(OnScrollListener listener)
và chỉ sử dụng phương thức này, bạn có thể ngăn không cho cuộn, chỉ cần như vậy:
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (viewModel.isItemSelected) {
recyclerView.stopScroll();
}
}
});
Ca sử dụng:
Giả sử bạn muốn tắt tính năng cuộn khi bạn nhấp vào một trong các mục bên trong RecyclerView
để bạn có thể thực hiện một số hành động với nó, mà không bị phân tâm khi vô tình cuộn sang mục khác và khi bạn hoàn thành việc đó, chỉ cần nhấp vào mục một lần nữa để cho phép cuộn. Vì thế, bạn sẽ muốn đính kèm OnClickListener
vào mọi mục bên trong RecyclerView
, vì vậy khi bạn nhấp vào một mục, nó sẽ chuyển isItemSelected
từ false
sang true
. Bằng cách này khi bạn cố cuộn, RecyclerView
sẽ tự động gọi phương thức onScrollStateChanged
và kể từ khi isItemSelected
được đặt thành true
, nó sẽ dừng ngay lập tức, trước khi RecyclerView
có cơ hội, cũng ... để cuộn.
Lưu ý: để sử dụng tốt hơn, hãy thử sử dụng GestureListener
thay vì OnClickListener
để ngăn chặn accidental
nhấp chuột.
RecyclerView
nếu bạn không muốn cuộn là gì?