【问题标题】:onSaveInstanceState not called on FragmentonSaveInstanceState 未在 Fragment 上调用
【发布时间】:2014-03-28 20:58:29
【问题描述】:

我正在用另一个片段替换一个片段:

    FragmentTransaction transaction = mFragmentManager.beginTransaction();

    transaction.setCustomAnimations(R.anim.enter, R.anim.exit, R.anim.pop_enter, R.anim.pop_exit);
    transaction.replace(R.id.main_container, nextFragment, nextFragment.getClass().toString());
    transaction.addToBackStack(nextFragment.getClass().toString());
    transaction.commit();

然而,被替换的片段,它的 onSaveInstanceState 没有被调用。我做错了什么?

【问题讨论】:

    标签: android


    【解决方案1】:

    “在一个 Fragment 中,它们的所有生命周期回调都直接绑定到它们的父 Activity。因此,当其父 Activity 调用 onSaveInstanceState 时,onSaveInstanceState 会在 Fragment 上调用。”

    看这篇文章:

    FragmentActivity onSaveInstanceState not getting called

    【讨论】:

    • 那么在这种情况下我有什么选择?
    • 你想用 onSaveInstanceState() 做什么?
    • 在我的活动中,我正在展示一个逐步的表格。每个步骤都在一个片段中。当用户按下下一步时,我通过上面的代码显示下一个片段(在我的问题中)。但是,当用户按回时,会出现上一步(片段),但它是一个新实例。这就是我尝试保存状态的原因,以便在用户继续下一步之前向用户显示他输入的内容。
    • 您应该能够在您的特定 Fragment 类中拥有一个变量,该变量存储当用户按下并返回到前一个片段时您需要保留的所有数据。 Fragment 实例在进入下一步时实际上并没有被销毁,尽管它的视图会这样做。
    • @kgmaize,是的,真的,在onCreateView() 中,我们可以检查savedInstanceStategetArguments() 以从Bundle 获取数据。如果我们从第二个片段返回(Activity 没有被销毁),onCreateView() 被调用,saveInstanceState == null 并且所有变量仍然存在。因此,我们可以检查我们的变量 isInitialized == false 是否并获取新值。如果 isInitialized == true 则跳过设置新值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多