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