J'ai un horizontal RecyclerView
et deux boutons (Suivant, Précédent) comme indiqué dans l'image ci-dessous.
donc je dois passer à l'élément ou à la position suivante en utilisant ces boutons, je connais la méthode appelée scrollTo
mais je ne sais pas comment ça marche
Tout simplement si trouvé la réponse:
case R.id.next:
mRecyclerView.getLayoutManager().scrollToPosition(linearLayoutManager.findLastVisibleItemPosition() + 1);
break;
case R.id.pre:
mRecyclerView.getLayoutManager().scrollToPosition(linearLayoutManager.findFirstVisibleItemPosition() - 1);
break;
RecyclerViews
ont une méthode qu'ils exposent pour faire défiler jusqu'à une certaine position:
Snap scroll à une position donnée:
mRecyclerView.scrollToPosition(int position)
Défilement fluide jusqu'à une position donnée:
mRecyclerView.smoothScrollToPosition(int position)
Pour que ces méthodes fonctionnent, le LayoutManager
du RecyclerView
doit avoir implémenté ces méthodes et LinearLayoutManager
les implémente de manière basique, vous devriez donc être prêt à partir .
int mFirst=0, mLast=0;
recyclerview.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
LinearLayoutManager llm = (LinearLayoutManager) recyclerview.getLayoutManager();
mLast = llm.findLastCompletelyVisibleItemPosition();
mFirst = llm.findFirstCompletelyVisibleItemPosition();
}
});
imgRight.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LinearLayoutManager llm = (LinearLayoutManager) recyclerview.getLayoutManager();
llm.scrollToPositionWithOffset(mLast + 1, List.length());
}
});
imgLeft.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LinearLayoutManager llm = (LinearLayoutManager) recyclerview.getLayoutManager();
llm.scrollToPositionWithOffset(mFirst - 1, List.length());
}
});
case R.id.next:
mRecyclerView.getLayoutManager().scrollToPosition(linearLayoutManager.findLastVisibleItemPosition() + 1);
break;
case R.id.pre:
mRecyclerView.getLayoutManager().scrollToPosition(linearLayoutManager.findFirstVisibleItemPosition() - 1);
break;