我对Android的RecyclerView.State有疑问.
我正在使用RecyclerView,我如何使用它并将其与RecyclerView.State绑定?
我的目的是保存RecyclerView的滚动位置.
我正在将ListViews迁移到RecyclerViews.使用listviews,我使用此处描述的常用技术来存储和恢复活动之间的滚动位置.
如何使用RecyclerViews做同样的事情?在RecyclerView.onSaveInstanceState()似乎有protected访问权限,因此无法直接使用.
如何获得滚动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) 我正在用 gridlayoutManager 填充 recyclerView。现在我想在屏幕旋转上保存滚动位置。
我尝试使用 onSaveInstanceState 和 onRestoreInstanceState() 这样做,如本文所示:
如何使用 RecyclerView.State 保存 RecyclerView 的滚动位置?
下面是我的代码:
@Override
protected void onSaveInstanceState(Bundle outState) {
Log.e(TAG, "onSaveInstanceState");
super.onSaveInstanceState(outState);
outState.putParcelable(KEY_INSTANCE_STATE_RV_POSITION,
gridLayoutManager.onSaveInstanceState());
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
Log.e(TAG, "onRestoreInstanceState");
super.onRestoreInstanceState(savedInstanceState);
if (savedInstanceState!= null){
Parcelable savedState =
savedInstanceState.getParcelable(KEY_INSTANCE_STATE_RV_POSITION);
movieAdapter.addAll(movieItemList);
if (savedState!= null){
gridLayoutManager.onRestoreInstanceState(savedState);
}
}
}
//this is my movieAdapter.addAll() method
public void addAll(List<MovieItem>items){
movieItems = items;
}
//This is the method to get lists of movies from ViewModel Class
private void loadFavMovies() {
FavViewModel …Run Code Online (Sandbox Code Playgroud)