如何以编程方式水平滚动 RecyclerView?

How to scroll horizontal RecyclerView programmatically?

我有一个 horizontal RecyclerView 和两个按钮(下一个,上一个),如下图所示。

所以我需要使用这些按钮移动到下一个项目或位置,我知道名为 scrollTo 的方法,但我不知道它是如何工作的

RecyclerViews 有一个用于滚动到特定位置的方法:

快速滚动到给定位置:

mRecyclerView.scrollToPosition(int position)

平滑滚动到给定位置:

mRecyclerView.smoothScrollToPosition(int position)

为了使这些方法起作用,RecyclerViewLayoutManager 需要实现这些方法,而 LinearLayoutManager 确实以基本方式实现了这些方法,所以你应该很好去。

我找到了答案:

case R.id.next:
    mRecyclerView.getLayoutManager().scrollToPosition(linearLayoutManager.findLastVisibleItemPosition() + 1);
    break;
case R.id.pre:
    mRecyclerView.getLayoutManager().scrollToPosition(linearLayoutManager.findFirstVisibleItemPosition() - 1);
    break;
case R.id.next:
    mRecyclerView.getLayoutManager().scrollToPosition(linearLayoutManager.findLastVisibleItemPosition() + 1);
    break;

case R.id.pre:
    mRecyclerView.getLayoutManager().scrollToPosition(linearLayoutManager.findFirstVisibleItemPosition() - 1);
    break;
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());
    }
});

添加到已接受的答案中,您需要检查当前位置,以免出现如下所示的 nullPointerException

binding.imageViewleft.setOnClickListener {
    if (layoutManager.findFirstCompletelyVisibleItemPosition()>0){
      binding.recyclerView.layoutManager?.scrollToPosition(layoutManager.findFirstCompletelyVisibleItemPosition()-1)
        }
    }
    binding.iv2.setOnClickListener {
            if (layoutManager.findLastCompletelyVisibleItemPosition()<(sectiondata.size-1) ){
                binding.recyclerView.layoutManager?.scrollToPosition(layoutManager.findLastCompletelyVisibleItemPosition()+1)
        }
    }