【发布时间】:2015-11-09 04:58:06
【问题描述】:
我有一个horizontal RecyclerView 和两个按钮(下一个,上一个),如下图所示。
所以我需要使用这些按钮移动到下一个项目或位置,我知道名为 scrollTo 的方法,但我不知道它是如何工作的
【问题讨论】:
标签: android android-layout android-activity android-recyclerview
我有一个horizontal RecyclerView 和两个按钮(下一个,上一个),如下图所示。
所以我需要使用这些按钮移动到下一个项目或位置,我知道名为 scrollTo 的方法,但我不知道它是如何工作的
【问题讨论】:
标签: android android-layout android-activity android-recyclerview
我找到了答案:
case R.id.next:
mRecyclerView.getLayoutManager().scrollToPosition(linearLayoutManager.findLastVisibleItemPosition() + 1);
break;
case R.id.pre:
mRecyclerView.getLayoutManager().scrollToPosition(linearLayoutManager.findFirstVisibleItemPosition() - 1);
break;
【讨论】:
RecyclerViews 有一个用于滚动到某个位置的方法:
将滚动捕捉到给定位置:
mRecyclerView.scrollToPosition(int position)
平滑滚动到给定位置:
mRecyclerView.smoothScrollToPosition(int position)
要使这些方法起作用,RecyclerView 的 LayoutManager 需要实现这些方法,而LinearLayoutManager 确实以基本方式实现了这些,所以你应该很高兴。
【讨论】:
scrollTo(int x, int y) 你也可以滚动视图,但是以更精细的方式。
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)
}
}
【讨论】: