web-dev-qa-db-fra.com

Comment faire défiler horizontalement RecyclerView par programme?

J'ai un horizontal RecyclerView et deux boutons (Suivant, Précédent) comme indiqué dans l'image ci-dessous.

enter image description here

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

14
Ahmad Alkhatib

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;
28
Ahmad Alkhatib

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 .

19
Gil Moshayof
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());
    }
});
3
Rushikesh Patil
case R.id.next:
    mRecyclerView.getLayoutManager().scrollToPosition(linearLayoutManager.findLastVisibleItemPosition() + 1);
    break;

case R.id.pre:
    mRecyclerView.getLayoutManager().scrollToPosition(linearLayoutManager.findFirstVisibleItemPosition() - 1);
    break;
3
eeeeee