我在屏幕旋转后找到了一些保存和恢复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);
}
}
屏幕旋转后,旧位置无法恢复。我知道我可以保存整数变量,但这种方式似乎更好。
有人可以帮我解决这个问题。
答案 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/
希望这有助于!!