如何在viewpager的片段中保存recyclerview的状态?
How to save state of recyclerview in fragment in viewpager?
我已经设置了一个包含 3 个片段的 ViewPager 和 TabLayout,其中一个片段有一个 RecyclerView。我想在片段被销毁后恢复 RecyclerView 的内容。
RecyclerView 由 API 填充,我使用 AsyncTaskLoader 在 onViewCreated 中调用它。我希望它在旋转时保留数据而不重新使用 API.
我正在尝试这样做:
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
mListState = mLayoutManager.onSaveInstanceState();
outState.putParcelable(LIST_KEY,mListState);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mLayoutManager = new LinearLayoutManager(mContext);
mRecyclerView = view.findViewById(R.id.recyclerView_earthquake);
mAdapter = new EarthquakeAdapter(getContext(), mList);
mRecyclerView.setAdapter(mAdapter);
if (savedInstanceState != null){
mListState = savedInstanceState.getParcelable(LIST_KEY);
mLayoutManager.onRestoreInstanceState(mListState);
} else {
Bundle queryBundle = new Bundle();
format = DateFormat.getDateInstance(DateFormat.SHORT);
String startDate = format.format(new Date(System.currentTimeMillis()));
String endDate = format.format(new Date(System.currentTimeMillis() + 86400000L));
queryBundle.putString("startDate", startDate);
queryBundle.putString("endDate", endDate);
LoaderManager.getInstance(this).restartLoader(0, queryBundle, this);
}
mRecyclerView.setLayoutManager(mLayoutManager);
}
这不起作用,当我旋转设备时,RecyclerView 是空的。
如果重要的话,我也在使用 FragmentStatePagerAdapter。
只需在适配器中设置项目
override fun onSaveInstanceState(outState: Bundle) {
outState.putParcelableArrayList(ITEMS_KEY, mItems)
}
在onViewCreated方法中
if (savedInstanceState?.containsKey(ITEMS_KEY) == true) {
mAdapter.setItems(savedInstanceState.getParcelableArrayList<YourModel>(ITEMS_KEY))
} else {
// load data
}
我已经设置了一个包含 3 个片段的 ViewPager 和 TabLayout,其中一个片段有一个 RecyclerView。我想在片段被销毁后恢复 RecyclerView 的内容。 RecyclerView 由 API 填充,我使用 AsyncTaskLoader 在 onViewCreated 中调用它。我希望它在旋转时保留数据而不重新使用 API.
我正在尝试这样做:
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
mListState = mLayoutManager.onSaveInstanceState();
outState.putParcelable(LIST_KEY,mListState);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mLayoutManager = new LinearLayoutManager(mContext);
mRecyclerView = view.findViewById(R.id.recyclerView_earthquake);
mAdapter = new EarthquakeAdapter(getContext(), mList);
mRecyclerView.setAdapter(mAdapter);
if (savedInstanceState != null){
mListState = savedInstanceState.getParcelable(LIST_KEY);
mLayoutManager.onRestoreInstanceState(mListState);
} else {
Bundle queryBundle = new Bundle();
format = DateFormat.getDateInstance(DateFormat.SHORT);
String startDate = format.format(new Date(System.currentTimeMillis()));
String endDate = format.format(new Date(System.currentTimeMillis() + 86400000L));
queryBundle.putString("startDate", startDate);
queryBundle.putString("endDate", endDate);
LoaderManager.getInstance(this).restartLoader(0, queryBundle, this);
}
mRecyclerView.setLayoutManager(mLayoutManager);
}
这不起作用,当我旋转设备时,RecyclerView 是空的。 如果重要的话,我也在使用 FragmentStatePagerAdapter。
只需在适配器中设置项目
override fun onSaveInstanceState(outState: Bundle) {
outState.putParcelableArrayList(ITEMS_KEY, mItems)
}
在onViewCreated方法中
if (savedInstanceState?.containsKey(ITEMS_KEY) == true) {
mAdapter.setItems(savedInstanceState.getParcelableArrayList<YourModel>(ITEMS_KEY))
} else {
// load data
}