web-dev-qa-db-ja.com

プログラムで水平方向のRecyclerViewをスクロールする方法は?

horizontal RecyclerViewと2つのボタン([次へ]、[前へ])を下の画像に示します。

enter image description here

これらのボタンを使用して次の項目または位置に移動する必要があるので、scrollToというメソッドについては知っていますが、どのように機能するかわかりません

14
Ahmad Alkhatib

単に答えが見つかった場合:

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には、特定の位置にスクロールするために公開するメソッドがあります。

所定の位置にスナップスクロール:

mRecyclerView.scrollToPosition(int position)

指定された位置までスムーズにスクロール:

mRecyclerView.smoothScrollToPosition(int position)

これらのメソッドが機能するためには、LayoutManagerRecyclerViewがこれらのメソッドを実装している必要があり、LinearLayoutManagerはこれらのメソッドを基本的な方法で実装しているので、 。

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