旋转屏幕时,onCreateView在Fragment上调用了两次

时间:2013-12-31 11:08:01

标签: android android-activity android-fragments fragment screen-rotation

我有一个带有NavigationDrawer和Fragment的Activity,当我点击NavigationDrawer时会创建它。当我创建片段时,我会传递一些参数。 当我旋转屏幕时,将重新创建活动,重新创建导航器以及片段。 执行此操作后,将重新创建片段,但不带参数。 我想了解谁是第二次创造片段...... 任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

在更改屏幕方向后尝试恢复视频播放器的状态(播放或暂停)和位置(经过的时间)时,我遇到了类似的问题。旋转屏幕一次时,我注意到片段活动中的onCreateView被调用了两次。旋转两次后,onCreateView会被调用三次-依此类推。最后一个调用以某种方式忘记了我保存在onSaveInstanceState中的状态(在片段活动中)。

在四处寻找时,我找到了想要的答案。在添加片段的活动中,我需要检查saveInstanceState是否为null。仅当它为null时,才应添加片段。

例如:

if (savedInstanceState == null) {
    fragmentManager = getSupportFragmentManager();

    FragmentActivity fragment = new FragmentActivity();

    fragmentManager.beginTransaction()
         .add(R.id.fragment_container, fragment)
         .commit();
}

更多信息可以在这里找到: Android Fragment lifecycle over orientation changes

答案 1 :(得分:0)

在带有Fragment活动的清单中使用此功能:

      android:configChanges="orientation|keyboardHidden|screenSize"

但是,如果您的应用程序的目标是API级别12或更低,那么您的活动始终会自行处理此配置更改(即使在Android 3.2或更高版本的设备上运行,此配置更改也不会重新启动您的活动)