片段重新配置更改

时间:2016-01-18 13:02:45

标签: android android-fragments

我对os的配置更改处理有疑问,假设我在onCreate()中有一个Activity,它使用该片段中定义的特殊构造函数创建一个(或多个)片段实例。

当设备方向改变时,系统将破坏并再次创建片段,如果我是正确的,它将使用默认(无参数)构造函数来执行此操作,同时活动也将重新创建,它将再次使用相同的构造函数实例化片段。我的问题是,内存中会有两个不同的实例吗?如果没有,他们如何解决并成为一个?

1 个答案:

答案 0 :(得分:3)

一些背景

在活动的整个生命周期内保持片段状态的责任在FragmentManager上,这就是为什么在提交时commitcommitAllowingStateLoss都有选项的原因。片段交易。如果留给自己的设备,Fragment的状态将自动恢复。但是......如果你在代码中添加片段(而不是在xml布局中添加它),那么只有在需要时才能添加它。 通常,在onCreate的情况下,检查活动是否未重新启动就足够了,即检查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();
    }
}

}

P.S。

你的问题的答案:

  

内存中会有两个不同的实例吗?

是的,如果您只是在每次调用onCreate时添加片段,那么会有多个实例。