Existe uma maneira mais direta de desativar a rolagem (tecnicamente, é mais a interceptação de um evento de rolagem e a finalização quando uma condição é atendida), usando apenas a funcionalidade padrão. RecyclerView
tem o método chamado addOnScrollListener(OnScrollListener listener)
, e usando apenas isso, você pode impedir a rolagem, da seguinte maneira:
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:
digamos que você deseja desativar a rolagem ao clicar em um dos itens dentro RecyclerView
para poder executar algumas ações com ele, sem se distrair ao rolar acidentalmente para outro item e, quando terminar, basta clicar em o item novamente para ativar a rolagem. Para isso, você gostaria de anexar OnClickListener
a todos os itens contidos nele RecyclerView
; portanto, quando você clica em um item, ele alterna isItemSelected
de false
para true
. Dessa forma, quando você tentar rolar, RecyclerView
chamará automaticamente o método onScrollStateChanged
e, como isItemSelected
definido como true
, será interrompido imediatamente, antes deRecyclerView
ter a chance, bem ... de rolar.
Nota: para uma melhor usabilidade, tente usar em GestureListener
vez de OnClickListener
impedir accidental
cliques.
RecyclerView
se você não deseja rolar?