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. RecyclerViewtem 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 RecyclerViewpara 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 OnClickListenera todos os itens contidos nele RecyclerView; portanto, quando você clica em um item, ele alterna isItemSelectedde falsepara true. Dessa forma, quando você tentar rolar, RecyclerViewchamará automaticamente o método onScrollStateChangede, como isItemSelecteddefinido como true, será interrompido imediatamente, antes deRecyclerView ter a chance, bem ... de rolar.
Nota: para uma melhor usabilidade, tente usar em GestureListenervez de OnClickListenerimpedir accidentalcliques.
RecyclerViewse você não deseja rolar?