编辑:似乎只有当我之前的活动是横向的,而setRequestedOrientation()是纵向的时,才会发生这种情况,这会是什么问题呢?
我在一个活动中有一段代码,它向REST API发起一个截击请求来检索一些数据,并有一个回调函数,如果成功检索到数据,它将启动一个片段。然而,这只适用于纵向模式,在横向模式下,它将抛出异常“片段管理器已被销毁”。
我似乎找不到这个问题的根源,因此我不能尝试任何替代解决方案。
这是此活动的onCreate()方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(SettingsManager.getOrientationSettings(this));
setContentView(R.layout.activity_settings);
findViews();
setListeners();
getSettings();
}goSettings()将检索数据,设置请求的方向将是ActivityInfo.SCREEN_ORIENTATION_PORTRAIT或ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE。
我的loadFirstPage()方法:
private void loadFirstPage() {
VMSSettingsPageOneFragment fragment = new VMSSettingsPageOneFragment();
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction()
.replace(R.id.settings_fragment_container, fragment)
.commit();
}错误消息:
E/FileUtils: File Write Exception
java.lang.IllegalStateException: FragmentManager has been destroyed
at androidx.fragment.app.FragmentManager.enqueueAction(FragmentManager.java:1853)
at androidx.fragment.app.BackStackRecord.commitInternal(BackStackRecord.java:321)
at androidx.fragment.app.BackStackRecord.commit(BackStackRecord.java:286)
at com.timeteccloud.icomm.platformVMS.settingsActivity.VMSSettingsActivity.loadFirstPage(VMSSettingsActivity.java:87)发布于 2020-03-24 23:57:10
您可以在提交片段事务之前实现检查,如下所示。
public boolean loadFragment(Fragment fragment) {
//switching fragment
if (fragment != null) {
FragmentTransaction transaction = fm.beginTransaction();
transaction.replace(R.id.main_frame_layout, fragment);
if (!fm.isDestroyed())
transaction.commit();
return true;
}
return false;
}发布于 2021-09-03 11:49:50
也许可以在代码中使用parentFragmentManager.beginTransaction()而不是childFragmentManager,如下所示
dialog.show(parentFragmentManager.beginTransaction(), BaseFragment.TAG_DIALOG)发布于 2020-02-05 16:51:41
您好,您可以这样使用它
声明一个处理程序
Handler handler = new Handler()然后将commit放入处理程序的post delayed中
// this is a hack to fix fragment has been destroyed issue do not put Transaction.replace
// into handler post delayed
handler.postDelayed({
// transaction.addToBackStack(null)
transaction.commit()
},500)不会把其他东西放在延迟发布的ie中。向事务添加分片(或替换transaction.replace( fragment,containerid,tag))
https://stackoverflow.com/questions/58814735
复制相似问题