2

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

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

在我的清单中,我有这个

<activity android:name="CalActivity" android:configChanges="orientation|keyboardHidden"/>

据我了解,将 configChanges 添加到该活动可以防止活动被破坏和重新创建,但 onCreate 仍然被调用并弄乱了片段。

我也尝试放入setRetainInstance()碎片,但这也无济于事

如果设备没有像应有的那样旋转碎片,并且我不想将其设为仅一个方向的活动,那么这更像是一种黑客行为,而不是实际解决问题

我还可以做些什么?

编辑:

这就是我创建片段的方式

Fragment miniMonthFrag = new MonthByWeekFragment(System.currentTimeMillis(), false);
ft.replace(R.id.cal_frame, miniMonthFrag).commit();
4

1 回答 1

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);
    }

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

于 2013-02-07T17:55:27.627 回答