使用onConfigurationChanged函数时应用程序崩溃的原因是什么?

时间:2016-06-20 07:41:16

标签: android android-fragments

我正在使用onConfigurationChanged函数检查android 4.0.3上的方向更改,以便在我的项目中显示两个不同的片段,但是当应用程序在第一个位置(横向或纵向)运行时,相关片段在我更改显示的方向相关片段时不会显示但当我再次更改它时,应用程序崩溃了。 这是我的代码:

FragmentManager     fragmentmanager     = getFragmentManager();
FragmentTransaction fragmentTransaction = ragmentmanager.beginTransaction();


@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Fragment1 fragment1 = new Fragment1();
        fragmentTransaction.replace(android.R.id.content, fragment1);

    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
        Fragment2 fragment2 = new Fragment2();
        fragmentTransaction.replace(android.R.id.content, fragment2);
    }
    fragmentTransaction.commit();
}

我该如何解决?

1 个答案:

答案 0 :(得分:2)

首先确保您在清单中的活动中声明了<activity android:name=".ActivityName" android:label="@string/app_name" android:configChanges="keyboardHidden|orientation" /> 属性。

  

在运行时发生配置更改时,默认情况下会关闭并重新启动活动,但声明具有此属性的配置将阻止活动重新启动。相反,活动仍在运行,并调用其onConfigurationChanged()方法。

因此,您需要声明清单属性以使您的活动知道您将自己处理配置更改:

onConfigurationChanged

第二,您需要在 FragmentManager fragmentmanager = getFragmentManager(); FragmentTransaction fragmentTransaction = ragmentmanager.beginTransaction();之前应用交易,因为它在启动时未被调用 - 您在应用程序启动时看不到任何内容。

最后,添加行OnConfigurationChange()

在{{1}}内部

以避免垃圾回收后的空指针异常。