在片段doc中,在其中一个示例中,他们在添加片段时会检查savedInstanceState == null
:
public static class DetailsActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getResources().getConfiguration().orientation
== Configuration.ORIENTATION_LANDSCAPE) {
// If the screen is now in landscape mode, we can show the
// dialog in-line with the list so we don't need this activity.
finish();
return;
}
if (savedInstanceState == null) {
// During initial setup, plug in the details fragment.
DetailsFragment details = new DetailsFragment();
details.setArguments(getIntent().getExtras());
getFragmentManager().beginTransaction().add(android.R.id.content, details).commit();
}
}
}
此检查的目的是什么?如果它不存在会发生什么?
答案 0 :(得分:22)
此检查的目的是什么?
不要将片段添加两次,但我更喜欢检查片段是否在那里,而不是依赖于Bundle
null
。
如果不存在会发生什么?
最初没有任何内容,因为当活动首次时,Bundle
将为null
。
然而,然后,用户将设备的屏幕从纵向旋转到横向。或者,用户更改语言。或者,用户将设备放入制造商提供的汽车底座中。或者,用户进行任何其他配置更改。
默认情况下,您的活动将被销毁并重新创建。默认情况下,您的片段也将被销毁并重新创建(例外:调用setRetainInstance(true)
的片段,这些片段与旧活动分离并附加到新活动上。)
因此,第二次时间创建活动 - 由于配置更改而创建的实例 - 您的片段已存在,因为它已重新创建或保留。您不希望该片段的第二个实例(通常),因此您会采取措施来检测是否已发生这种情况并且未运行新的FragmentTransaction
。