【问题标题】:android fragment onRestoreInstanceStateandroid 片段 onRestoreInstanceState
【发布时间】:2011-07-21 17:30:12
【问题描述】:

我是否遗漏了什么或者Fragments 没有onRestoreInstanceState() 方法?如果没有,我该如何获得类似的东西?

【问题讨论】:

    标签: android save state android-fragments


    【解决方案1】:

    片段没有onRestoreInstanceState 方法。

    您可以在onActivityCreated 中获得相同的结果,它接收具有已保存实例状态(或为空)的包。

    查看源代码here

    【讨论】:

    • 这不是一致的设计,是吗?
    • 这也不负责恢复片段吧?配置更改很好,但是如果您从片段转到活动然后返回片段怎么办?
    • Fragments 一开始应该属于一个activity,所以如果你保存在fragment中,它会保存到父activity。因此,如果您离开该片段(属于某个活动)并返回该片段,则所有值都会从父活动中恢复
    • onActivityCreated() 不是恢复片段状态的唯一方法。您可以在 onCreate()、onCreateView() 或 onActivityCreated() 期间恢复它。 developer.android.com/guide/components/fragments.html
    • @EhteshChoudhury Android 应用程序开发中没有什么是“一致的设计”。一切都搞砸了,一切都被“弃用”了。
    【解决方案2】:

    我知道,您已经接受了答案,但您应该阅读official documentation about fragments,上面写着(“处理片段生命周期”段落):

    您可以使用 Bundle 保留片段的状态,以防 Activity 的进程被终止,并且您需要在重新创建 Activity 时恢复片段状态。您可以在片段的 onSaveInstanceState() 回调期间保存状态并在 onCreate()、onCreateView() 或 onActivityCreated() 期间恢复它

    所以,您可以使用最适合您的:onCreate()onCreateView()onActivityCreated()

    【讨论】:

      【解决方案3】:

      在 Fragments 指南的 ListFragment example 你可以找到:

      @Override
      public void onSaveInstanceState(Bundle outState) {
          super.onSaveInstanceState(outState);
          outState.putInt("curChoice", mCurCheckPosition);
      }
      

      你可以这样使用:

      @Override
      public void onActivityCreated(Bundle savedInstanceState) {
          super.onActivityCreated(savedInstanceState);
          if (savedInstanceState != null) {
              // Restore last state for checked position.
              mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);
          }
      }
      

      片段从堆栈返回后调用onActivityCreated()

      【讨论】:

        【解决方案4】:

        FragmentonViewStateRestored 相当于ActivityonRestoreInstanceState。但它是在onActivityCreated(Bundle) 之后和onStart() 之前调用的。

        【讨论】:

          【解决方案5】:

          onActivityCreated is deprecated。我发现它只是在片段生命周期方面令人困惑。这样做:

          @Override
          public void onSaveInstanceState(Bundle outState) {
              super.onSaveInstanceState(outState);
              outState.putInt("curChoice", mCurCheckPosition);
          }
          

          // 然后:

            override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
                      super.onViewCreated(view, savedInstanceState)
              savedIInistanceState?.let{ 
          //restore the data here
              }
              }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多