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. RecyclerViewcó 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 OnClickListenervà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 isItemSelectedtừ falsesang true. Bằng cách này khi bạn cố cuộn, RecyclerViewsẽ tự động gọi phương thức onScrollStateChangedvà kể từ khi isItemSelectedđược đặt thành true, nó sẽ dừng ngay lập tức, trước khi RecyclerViewcó cơ hội, cũng ... để cuộn.
Lưu ý: để sử dụng tốt hơn, hãy thử sử dụng GestureListenerthay vì OnClickListenerđể ngăn chặn accidentalnhấp chuột.
RecyclerViewnếu bạn không muốn cuộn là gì?