fragment stack 保存数据
背景
需要在 fragment 进行 replace 然后 pop 回来之后,一些选择项还是原来的选项。
方法
- 查阅了很多资料,发现如果是 view 类型那么可以被自动保存,非 view 的就需要我们自己来保存了。
- 按照 fragment 的生命周期来说,需要在
onDestroyView
中进行保存,在onCreateView
中进行读取。 - 如果是比较简单的,那么直接使用本身生成的 fragement 类型中的
setArguments
和getArguments
来得到 bundle 来操作即可。 - 如果是比较复杂的,最好自己来实现一个保存和读取的,方便控制。然后在
onDestroyView
,onCreateView
里面进行调用即可。
public Bundle setSaveBundle(Bundle bundle) {
if (bundle == null) {
bundle = new Bundle();
}
bundle.putInt("type_index", analysisTypeLastSelected);
DLog.d(TAG, "setSaveBundle: " + "type_index: " + analysisTypeLastSelected);
return bundle;
}
public void getSaveBundle(Bundle bundle) {
if (bundle == null) {
DLog.d(TAG, "getSaveBundle: " + "null!");
return;
}
analysisTypeLastSelected = bundle.getInt("type_index");
DLog.d(TAG, "getSaveBundle: " + "type_index: " + analysisTypeLastSelected);
}
参考:
[译] 保存/恢复 Activity 和 Fragment 状态的最佳实践
https://segmentfault.com/a/1190000006691830
切换Fragment时实现数据保持
https://www.cnblogs.com/zhujiabin/p/4192613.html
Pro Android学习笔记(四一):Fragment(6):数据保留
https://blog.csdn.net/flowingflying/article/details/12749403
Android Fragment 生命周期onCreatView、onViewCreated
https://blog.csdn.net/asdf717/article/details/51383750
Android中Fragment数据保存和恢复
https://www.jianshu.com/p/015c79bedb41
onSaveInstanceState()和onRestoreInstanceState()使用详解
https://www.jianshu.com/p/27181e2e32d2
Android 使用onSaveInstanceState保存数据
https://blog.csdn.net/qq_34694875/article/details/109530012
android onSaveInstanceState方法
https://www.jianshu.com/p/5dde143a143f
Android Fragment 在返回栈popBackStack() ,返回时onResume问题
https://blog.csdn.net/qq_34983989/article/details/78126362
Android Fragment回退栈管理(popBackStack)
https://blog.csdn.net/qq_35988274/article/details/100518346