如何以编程方式水平滚动 RecyclerView?
How to scroll horizontal RecyclerView programmatically?
我有一个 horizontal RecyclerView
和两个按钮(下一个,上一个),如下图所示。
所以我需要使用这些按钮移动到下一个项目或位置,我知道名为 scrollTo
的方法,但我不知道它是如何工作的
RecyclerViews
有一个用于滚动到特定位置的方法:
快速滚动到给定位置:
mRecyclerView.scrollToPosition(int position)
平滑滚动到给定位置:
mRecyclerView.smoothScrollToPosition(int position)
为了使这些方法起作用,RecyclerView
的 LayoutManager
需要实现这些方法,而 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)
}
}
我有一个 horizontal RecyclerView
和两个按钮(下一个,上一个),如下图所示。
所以我需要使用这些按钮移动到下一个项目或位置,我知道名为 scrollTo
的方法,但我不知道它是如何工作的
RecyclerViews
有一个用于滚动到特定位置的方法:
快速滚动到给定位置:
mRecyclerView.scrollToPosition(int position)
平滑滚动到给定位置:
mRecyclerView.smoothScrollToPosition(int position)
为了使这些方法起作用,RecyclerView
的 LayoutManager
需要实现这些方法,而 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)
}
}