seb*_*seb 27 java android android-recyclerview
如何获得滚动Recyclerview
或Layoutmanager
?
我可以通过添加一个来测量滚动位置OnScrollListener
,但是当Orientation更改scrollDy
为0时.
mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
int scrollDy = 0;
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
scrollDy += dy;
}
});
Run Code Online (Sandbox Code Playgroud)
yig*_*git 41
你无法得到它,因为它确实不存在.LayoutManager
只知道屏幕上的观点,它不知道之前的观点,它们的大小是什么等.
您可以使用滚动侦听器计算的数字是不可靠的,因为如果数据更改,RecyclerView
将执行新的布局计算,并且不会尝试重新计算实际偏移量(onScroll(0, 0)
如果移动了视图,您将收到).
RecyclerView估计滚动条的这个值,您可以使用View
类中的相同方法.
computeHorizontalScrollExtent
computeHorizontalScrollRange
computeHorizontalScrollOffset
这些方法也有垂直对应方式.
Sho*_*war 25
对于今后的使用,如果你之间切换Fragments
在同一个activity
和所有你想要做的是保存滚动位置的recyclerview
,然后恢复recyclerview
到相同的滚动位置,你可以做如下:
在您的onStop()/onDestroyView()/onPause()
回调更合适的情况下,请执行以下操作:
Parcelable recylerViewState = recyclerView.getLayoutManager().onSaveInstanceState();
Run Code Online (Sandbox Code Playgroud)
在你的onStart()/onCreateView()/onResume()
回调更合适的情况下,这样做:
recyclerView.getLayoutManager().onRestoreInstanceState(recylerViewState);
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以成功地保持recyclerView's
状态parcelable
并随时恢复.
Sur*_*gch 18
我想到的问题只是想获得当前滚动到的项目位置索引.对于想要这样做的其他人,您可以使用以下内容:
LinearLayoutManager myLayoutManager = myRecyclerView.getLayoutManager();
int scrollPosition = myLayoutManager.findFirstVisibleItemPosition();
Run Code Online (Sandbox Code Playgroud)
您还可以获得以下其他职位:
findLastVisibleItemPosition()
findFirstCompletelyVisibleItemPosition()
findLastCompletelyVisibleItemPosition()
感谢这个答案的帮助.它还显示了如何保存和恢复滚动位置.
归档时间: |
|
查看次数: |
45938 次 |
最近记录: |