【问题标题】:Android: RecyclerView GridLayoutManager - Restoring scroll position doesn't work properlyAndroid:RecyclerView GridLayoutManager - 恢复滚动位置无法正常工作
【发布时间】:2016-11-14 07:37:33
【问题描述】:

我有 3 项活动: A --> B --> C

在活动 B 中,我使用 RecyclerView 的 GridlayoutManager 进行填充。我想在导航到 Activity C 时保存滚动状态,并在我从 Activity C 返回到 Activity B 时恢复滚动状态。

private RecyclerView mImgList;
private GridLayoutManager mRecyclerGridMan;
private final String KEY_RECYCLER_STATE = "recycler_state";
private Parcelable mListState = null;
private static Bundle mBundleRecyclerViewState;

.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

.

@Override
protected void onPause()
{
    super.onPause();
    mBundleRecyclerViewState = new Bundle();
    mListState = mImgList.getLayoutManager().onSaveInstanceState();
    mBundleRecyclerViewState.putParcelable(KEY_RECYCLER_STATE, mListState);
}

.

@Override
protected void onResume()
{
    super.onResume();
    if (mBundleRecyclerViewState != null) {
        mListState = mBundleRecyclerViewState.getParcelable(KEY_RECYCLER_STATE);
        mImgList.getLayoutManager().onRestoreInstanceState(mListState);
    }
}

但是当我从 Activity B 按下返回按钮并转到 Activity A,然后从 Activity A 导航回 Activity B 时,这会起作用。

【问题讨论】:

  • 你检查过你的mBundleRecyclerViewState真的不是null吗?
  • @VladMatvienko 是的,我检查过,当我从活动 C 回到活动 B 时,mBundleRecyclerViewState 不为空。
  • 您在恢复活动后是否再次填充您的列表?
  • 您可以尝试在处理程序中执行onRestoreInstanceState。我不确定它是否有帮助,但它可能会。
  • @VygintasB 是的,我的填充代码在 onStart() 方法中。 onRestart(), onStart(), onResume() 这些方法在我从 Activity C 回到 B 时被调用。

标签: android android-recyclerview onsaveinstancestate


【解决方案1】:

在onRestoreInstanceState()中恢复状态

protected void onRestoreInstanceState(Bundle state) {
super.onRestoreInstanceState(state);

// Retrieve list state and list/item positions
if(state != null)
   mListState =   mBundleRecyclerViewState.getParcelable(KEY_RECYCLER_STATE);
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多