Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在frgamentActivity oncreate()上检查savedinstancestate的原因_Android_Android Fragments - Fatal编程技术网

Android 在frgamentActivity oncreate()上检查savedinstancestate的原因

Android 在frgamentActivity oncreate()上检查savedinstancestate的原因,android,android-fragments,Android,Android Fragments,我正在研究片段,我在文档中查看了教程中的articles master details示例。我们有两个片段,一个用于文章标题,选中后将显示详细文章视图(多窗格布局)。我得到了大部分教程,除了一小部分,为什么他们在onCreate方法中检查savedInstancestate 所以我的问题是关于容器活动的onCreate()方法。它有这张支票 if (savedInstanceState != null) { return; } 当我删除

我正在研究片段,我在文档中查看了教程中的articles master details示例。我们有两个片段,一个用于文章标题,选中后将显示详细文章视图(多窗格布局)。我得到了大部分教程,除了一小部分,为什么他们在onCreate方法中检查savedInstancestate

所以我的问题是关于容器活动的onCreate()方法。它有这张支票

 if (savedInstanceState != null) {
                return;
            }
当我删除它时,这些片段在ui中是重叠的。所以我知道它阻止了这一切,但我不知道为什么?我想找个人给我解释一下

提前谢谢

编辑:完整的方法

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.news_articles);

    // Check whether the activity is using the layout version with
    // the fragment_container FrameLayout. If so, we must add the first fragment
    if (findViewById(R.id.fragment_container) != null) {

        // However, if we're being restored from a previous state,
        // then we don't need to do anything and should return or else
        // we could end up with overlapping fragments.
        if (savedInstanceState != null) {
            return;
        }

        // Create an instance of ExampleFragment
        HeadlinesFragment firstFragment = new HeadlinesFragment();

        // In case this activity was started with special instructions from an Intent,
        // pass the Intent's extras to the fragment as arguments
        firstFragment.setArguments(getIntent().getExtras());

        // Add the fragment to the 'fragment_container' FrameLayout
        getSupportFragmentManager().beginTransaction()
                .add(R.id.fragment_container, firstFragment).commit();
    }
}

savedInstanceState检查上次保存的状态

在安卓系统中,每当你旋转你的设备或从另一个活动中回来时,安卓系统的一般生命周期就开始了,就像onCreate>onStart>onResume等等。。 这意味着你的整个活动都是从新鲜开始的

但在savedInstanceState中,您将获得UI的最后一个状态,即您已保存或正在使用的状态。

我得到了它

要点是:如果活动被屏幕旋转行为破坏,那么活动包含的片段将自动保存


因此,当活动从以前的状态(屏幕旋转)恢复时,将再次调用onCreate()方法,这意味着当屏幕旋转时(根据上面的代码),将再次添加片段。因此,如果从旋转中恢复,我们必须检查onCreate()方法的内部。
if(savedInstanceState!=null)
因此无需重新添加片段,只需不做任何操作。

感谢您的重播。我明白这一点。我想说的是,即使当设备旋转并重新启动生命周期时,它也应该毫无问题地重新连接片段。那里发生了什么?我发布了完整的onCreate()方法。