我有一个保存片段的活动,当单击该片段上的某个内容时,我将用另一个片段替换该片段。如果设备在第二个片段中与一起旋转,则会为活动调用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();
最佳答案
代替替换使用:
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);
}
这将确保在旋转之后使用预先存在的片段。