保持活动不会在方向更改时重新创建我的片段

tyc*_*czj 2 android screen-orientation android-fragments

我有一个包含片段的活动,当点击该片段上的某些内容时,我将该片段替换为另一个片段.如果设备在第二个片段中旋转,则会onCreate调用该活动并再次重新创建第一个片段.

如何在设备旋转时停止onCreate被调用?

在我的清单中我有这个

<activity android:name="CalActivity" android:configChanges="orientation|keyboardHidden"/>
Run Code Online (Sandbox Code Playgroud)

我的理解是,将configChanges添加到该活动可防止活动被销毁和重新创建,但onCreate仍会被调用并混乱碎片.

我也尝试过setRetainInstance()插入片段,这也没有帮助

如果设备没有旋转,片段就像它们应该的那样工作,我不想让它成为一个只有一个方向的活动,那就更像是一个黑客而不是实际修复问题

我还可以做些什么?

编辑:

这就是我创建片段的方式

Fragment miniMonthFrag = new MonthByWeekFragment(System.currentTimeMillis(), false);
ft.replace(R.id.cal_frame, miniMonthFrag).commit();
Run Code Online (Sandbox Code Playgroud)

Jus*_*ler 6

而不是使用替换使用:

 FragmentManager fm = getFragmentManager();
    if (fm.findFragmentById(R.id.cal_frame) == null) {
        mFragment = new MonthByWeekFragment(System.currentTimeMillis(), false);
        fm.beginTransaction().add(R.id.cal_frame, mFragment ).commit();
    } else {
        mFragment = (MonthByWeekFragment) fm.findFragmentById(R.id.cal_frame);
    }
Run Code Online (Sandbox Code Playgroud)

这将确保您在旋转后使用预先存在的片段.

  • 您可以在添加它时为每个片段添加不同的标记(add()方法中的第三个参数),或者使用"if(片段实例MyOtherFragmentClass)"检查来检查您获得的片段的类型. (2认同)