Es gibt eine einfachere Möglichkeit, das Scrollen zu deaktivieren (technisch gesehen ist es eher das Abfangen eines Bildlaufereignisses und das Beenden, wenn eine Bedingung erfüllt ist), indem nur die Standardfunktionalität verwendet wird. RecyclerView
hat die Methode aufgerufen addOnScrollListener(OnScrollListener listener)
, und wenn Sie nur diese verwenden, können Sie das Scrollen stoppen, nur so:
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (viewModel.isItemSelected) {
recyclerView.stopScroll();
}
}
});
Anwendungsfall:
Angenommen, Sie möchten das Scrollen deaktivieren, wenn Sie auf eines der darin enthaltenen Elemente klicken, RecyclerView
damit Sie einige Aktionen damit ausführen können, ohne durch versehentliches Scrollen zu einem anderen Element abgelenkt zu werden. Wenn Sie damit fertig sind, klicken Sie einfach auf das Element erneut, um das Scrollen zu aktivieren. Zu diesem Zweck möchten Sie OnClickListener
an jedes Element in diesem Element anhängen. RecyclerView
Wenn Sie also auf ein Element klicken, wird isItemSelected
von false
zu umgeschaltet true
. Auf diese Weise , wenn Sie blättern versuchen, RecyclerView
wird Methode automatisch aufrufen onScrollStateChanged
und da isItemSelected
Satz true
, wird es sofort zu stoppen, bevor RecyclerView
die Chance bekam, gut ... zu blättern.
Hinweis: Versuchen Sie zur besseren Benutzerfreundlichkeit, Klicks zu verwenden, GestureListener
anstatt sie OnClickListener
zu verhindern accidental
.
RecyclerView
wenn Sie nicht scrollen möchten?