【问题标题】:Store and restore RecyclerView position not working存储和恢复 RecyclerView 位置不起作用
【发布时间】:2017-08-24 02:31:41
【问题描述】:

我在片段中使用 GridLayoutManager 作为 RecyclerView 的 LayoutManager,并且 RecyclerView 适配器由加载器填充。 我尝试在设备旋转时存储和恢复 GridLayoutManager 的状态,但无法正常工作,并且仍然返回到初始状态“RecyclerView 中的第一个元素”。

onSaveInstanceState 方法:

    @Override
public void onSaveInstanceState(Bundle outState) {
    mRecylcerViewParecelable = mGridView.getLayoutManager().onSaveInstanceState();
    outState.putParcelable(GRID_LAYOUT_PARCEL_KEY, mRecylcerViewParecelable);
    super.onSaveInstanceState(outState);
}

onViewStateRestored 方法:

    @Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
    if(savedInstanceState!=null){
        mRecylcerViewParecelable = savedInstanceState.getParcelable(GRID_LAYOUT_PARCEL_KEY);
    }
    super.onViewStateRestored(savedInstanceState);
}

onLoadFinished 方法:

    @Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    mMovieAdapter.swapCursor(data);
  mGridView.getLayoutManager().onRestoreInstanceState(mRecylcerViewParecelable);}

【问题讨论】:

    标签: android android-recyclerview scroll-position


    【解决方案1】:

    尝试将onRestoreInstanceState() 包裹在 Handler 中:

    new Handler().postDelayed(new Runnable() {
                @Override public void run() {
                    mGridView.getLayoutManager().onRestoreInstanceState(listState);
                }
            }, 300);
    

    延迟onRestoreInstanceState 是一种技巧。 我遇到了同样的问题,IMO 看起来 RecyclerView 一直回到初始状态,因为当我们调用 onRestoreInstanceState 时适配器中的数据仍在填充。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 2016-09-03
    • 1970-01-01
    相关资源
    最近更新 更多