背景

需要在 fragment 进行 replace 然后 pop 回来之后,一些选择项还是原来的选项。

方法

  1. 查阅了很多资料,发现如果是 view 类型那么可以被自动保存,非 view 的就需要我们自己来保存了。
  2. 按照 fragment 的生命周期来说,需要在 onDestroyView 中进行保存,在 onCreateView 中进行读取。
  3. 如果是比较简单的,那么直接使用本身生成的 fragement 类型中的 setArgumentsgetArguments 来得到 bundle 来操作即可。
  4. 如果是比较复杂的,最好自己来实现一个保存和读取的,方便控制。然后在 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

标签: application

添加新评论