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. RecyclerViewtiene 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 RecyclerViewpara 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 OnClickListenera cada elemento dentro RecyclerView, por lo que cuando hace clic en un elemento, se alternaría isItemSelectedde falsea true. De esta forma, cuando intente desplazarse, RecyclerViewllamará automáticamente al método onScrollStateChangedy, puesto que está isItemSelectedconfigurado en true, se detendrá inmediatamente, antes de RecyclerViewtener la oportunidad, bueno ... de desplazarse.
Nota: para una mejor usabilidad, intente usar en GestureListenerlugar de OnClickListenerevitar accidentalclics.
RecyclerViewsi no quieres desplazarte?