Hay una forma más directa de deshabilitar el desplazamiento (técnicamente es más bien la intercepción de un evento de desplazamiento y finalizarlo cuando se cumple una condición), utilizando solo la funcionalidad estándar. RecyclerView
tiene el método llamado addOnScrollListener(OnScrollListener listener)
, y usando solo esto puede evitar que se desplace, así:
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (viewModel.isItemSelected) {
recyclerView.stopScroll();
}
}
});
Caso de uso:
supongamos que desea deshabilitar el desplazamiento cuando hace clic en uno de los elementos dentro RecyclerView
para poder realizar algunas acciones con él, sin distraerse desplazándose accidentalmente a otro elemento, y cuando haya terminado con él, simplemente haga clic en el elemento nuevamente para habilitar el desplazamiento. Para eso, querrá adjuntar OnClickListener
a cada elemento dentro RecyclerView
, por lo que cuando hace clic en un elemento, se alternaría isItemSelected
de false
a true
. De esta forma, cuando intente desplazarse, RecyclerView
llamará automáticamente al método onScrollStateChanged
y, puesto que está isItemSelected
configurado en true
, se detendrá inmediatamente, antes de RecyclerView
tener la oportunidad, bueno ... de desplazarse.
Nota: para una mejor usabilidad, intente usar en GestureListener
lugar de OnClickListener
evitar accidental
clics.
RecyclerView
si no quieres desplazarte?