恢复recyclerview状态

时间:2016-02-16 16:03:55

标签: java android android-recyclerview state

我在屏幕旋转后找到了一些保存和恢复RecyclerView状态的代码,但它无法正常工作。

代码:

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putParcelable(Constants.LIST_SAVED_POSITION, recyclerView.getLayoutManager().onSaveInstanceState());
}

@Override
public void onViewStateRestored(Bundle savedInstanceState) {
    super.onViewStateRestored(savedInstanceState);
    if (savedInstanceState!=null && savedInstanceState.containsKey(Constants.LIST_SAVED_POSITION)){
        Parcelable parcelable;
        parcelable = savedInstanceState.getParcelable(Constants.LIST_SAVED_POSITION);
        recyclerView.getLayoutManager().onRestoreInstanceState(parcelable);
    }
}

屏幕旋转后,旧位置无法恢复。我知道我可以保存整数变量,但这种方式似乎更好。

有人可以帮我解决这个问题。

3 个答案:

答案 0 :(得分:1)

你可以加上这个 对于您在manifist.xml中的活动,禁用活动来重新创建自己,因此在屏幕旋转后,活动会保存所有变量。

    android:configChanges="orientation|keyboardHidden" 
     >

答案 1 :(得分:0)

我发现了问题。在片段上调用此代码。但问题在于重新创建活动中的片段。当我修复重新创建片段时,列表即使不保存状态也会恢复位置。

旧代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_supplication_detail);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    chapter = getIntent().getIntExtra(Constants.SELECTED_ITEM, 1);

    fragmentSupplicationDetail = new FragmentSupplicationDetail();
    Bundle extras = new Bundle();
    extras.putInt(Constants.SELECTED_ITEM, chapter);
    fragmentSupplicationDetail.setArguments(extras);
    transaction.replace(R.id.container, fragmentSupplicationDetail, SUPPLICATION_FRAGMENT_TAG).commit();
}

修正:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_supplication_detail);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    chapter = getIntent().getIntExtra(Constants.SELECTED_ITEM, 1);
    if (getSupportFragmentManager().findFragmentByTag(SUPPLICATION_FRAGMENT_TAG) == null){
        fragmentSupplicationDetail = new FragmentSupplicationDetail();
        Bundle extras = new Bundle();
        extras.putInt(Constants.SELECTED_ITEM, chapter);
        fragmentSupplicationDetail.setArguments(extras);
        Log.d(Constants.LOG_TAG, getClass().getSimpleName() + ": Создаем фрагмент ");
    }else {
        fragmentSupplicationDetail = (FragmentSupplicationDetail) getSupportFragmentManager().findFragmentByTag(SUPPLICATION_FRAGMENT_TAG);
        Log.d(Constants.LOG_TAG, getClass().getSimpleName() + ": Восстанавливаем фрагмент ");
    }
    transaction.replace(R.id.container, fragmentSupplicationDetail, SUPPLICATION_FRAGMENT_TAG).commit();
}

答案 2 :(得分:-1)

我最近使用的是Recycler视图,想要拥有你想要的相同功能,我已经按照下面提到的教程,即使在旋转屏幕后它仍然保持视图的状态。请参考以下链接。

http://www.androidtutorialpoint.com/material-design/listing-items-using-recyclerview/

希望这有助于!!