由于方向更改而调用onCreate时,片段不为null

时间:2015-04-06 09:34:40

标签: android-fragments android-activity

我有一个活动,在它的onCreate中为它的布局添加一个片段。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.new_layout);
    FragmentManager fm = getSupportFragmentManager();

    //R.id.fragment_container refers to a framelayout in R.layout.new_layout 
    MyFragment fragment = (MyFragment) fm
                .findFragmentById(R.id.fragment_container);
    if (fragment == null) {
        FragmentTransaction ft = fm.beginTransaction();
        ft.add(R.id.fragment_container, new MyFragment());
        ft.commit();
    }
}

第一次创建活动并调用onCreate时,fragment为null,因此将新的MyFragment添加到R.id.fragment_container。我希望在方向更改后调用onCreate时会出现相同的情况,但在这种情况下,fragment确实不是null。我真的想知道当方向改变时确实发生了。

1 个答案:

答案 0 :(得分:0)

当方向改变时,整个屏幕都会刷新。 Android会重新启动整个正在运行的Activity。当发生这种情况时,会调用onDestroy(),然后调用onCreate()。您可以通过做一些事情来处理方向变化。处理此重新启动的一种方法是使用onSaveInstanceState()。另一种(更容易)处理此问题的方法是一起禁用方向更改。您可以通过访问AndroidManifest文件并在活动部分下添加android:screenOrientation="portrait"android:screenOrientation="landscape"来完成此操作。

Handling Runtime Changes in Android