Il existe un moyen plus simple de désactiver le défilement (techniquement, il s'agit plutôt d'intercepter un événement de défilement et de le terminer lorsqu'une condition est remplie), en utilisant uniquement des fonctionnalités standard. RecyclerView
a la méthode appelée addOnScrollListener(OnScrollListener listener)
, et en utilisant juste cela, vous pouvez l'empêcher de défiler, juste pour:
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (viewModel.isItemSelected) {
recyclerView.stopScroll();
}
}
});
Cas d'utilisation:
disons que vous souhaitez désactiver le défilement lorsque vous cliquez sur l'un des éléments à l'intérieur RecyclerView
afin de pouvoir effectuer certaines actions avec lui, sans être distrait par un défilement accidentel vers un autre élément, et lorsque vous avez terminé, cliquez simplement sur l'élément à nouveau pour activer le défilement. Pour cela, vous souhaitez attacher OnClickListener
à chaque élément à l'intérieur RecyclerView
, donc lorsque vous cliquez sur un élément, il basculera isItemSelected
de false
à true
. De cette façon, lorsque vous essayez de faire défiler, RecyclerView
appellera automatiquement la méthode onScrollStateChanged
et depuis qu'il est isItemSelected
défini sur true
, il s'arrêtera immédiatement, avant d' RecyclerView
avoir la chance, bien ... de faire défiler.
Remarque: pour une meilleure convivialité, essayez d'utiliser GestureListener
plutôt que d' OnClickListener
empêcher les accidental
clics.
RecyclerView
si vous ne souhaitez pas faire défiler?