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. RecyclerViewa 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 RecyclerViewafin 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 isItemSelectedde falseà true. De cette façon, lorsque vous essayez de faire défiler, RecyclerViewappellera automatiquement la méthode onScrollStateChangedet depuis qu'il est isItemSelecteddéfini sur true, il s'arrêtera immédiatement, avant d' RecyclerViewavoir la chance, bien ... de faire défiler.
Remarque: pour une meilleure convivialité, essayez d'utiliser GestureListenerplutôt que d' OnClickListenerempêcher les accidentalclics.
RecyclerViewsi vous ne souhaitez pas faire défiler?