我在 MainActivity 中进行了 7 次更改,并获得了像素级完美的结果。当从其他活动(例如 DetailActivity)返回时,我的 recyclerview 总是记得它以前的状态。
第一步:像这样初始化layoutManager:
// Initialize the layout manager
moviePosterLayoutManager = (moviePosterRecyclerView.getLayoutManager() == null) ?
new GridLayoutManager(this, numberOfColumns) : moviePosterRecyclerView.getLayoutManager();
// create a new layoutManager // reuse the existing layoutManager
第 2 步:
在 MainActivity 类中,创建一个 STATIC 变量来保存您在活动之间转换时的布局管理器状态:
private static Parcelable layoutManagerState;
第 3 步:
同样在 MainActivity () 中创建这个常量:
public static final String KEY_LAYOUT_MANAGER_STATE = "layoutManagerState";
第 4 步:
在 MainActivity 的 onCreate 方法中执行以下测试,(即
protected void onCreate(@Nullable final Bundle savedInstanceState) {....
if (layoutManagerState != null) {
//moviePosterLayoutManager
moviePosterLayoutManager.onRestoreInstanceState(layoutManagerState);
moviePosterRecyclerView.setLayoutManager(moviePosterLayoutManager);
} else {
moviePosterRecyclerView.setLayoutManager(moviePosterLayoutManager);
moviePosterRecyclerView.scrollToPosition(moviePosition);
// the default position
}
第 5 步:
在您的 onSaveInstanceState 方法中,请务必
将您的 layoutManagerState 保存为 parcelable,如下所示:
protected void onSaveInstanceState(Bundle outState) {
layoutManagerState = moviePosterLayoutManager.onSaveInstanceState();
// Save currently selected layout manager.
outState.putParcelable(KEY_LAYOUT_MANAGER_STATE,layoutManagerState);
}
第 6 步:
在 MainActivity 的 onResume() 方法中放置类似的代码:
protected void onResume() {
super.onResume();
if (layoutManagerState != null) {
moviePosterLayoutManager.onRestoreInstanceState(layoutManagerState);
}
}
第 7 步:
请记住,所有这些代码都放在了我的 MainActivity.java 文件中。这很重要
要记住,layoutManager 负责维护的滚动位置
回收站视图。因此,保存 layoutManager 的状态至关重要。代码可以
模块化并放置在自定义recyclerview中,但我发现这对我来说更简单
实施。