我在活动中显示一个对话框片段,尝试使用 show() 和 add() 方法。代码如下
HelpDialogFragment hdf = HelpDialogFragment.newInstance();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(hdf, "dialog");
ft.commit(); #crash here
我有时会从上面的代码中得到 IllegalStateException 错误,崩溃日志如下所示
java.lang.IllegalStateException: Activity has been destroyed
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1329)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:548)
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:532)
at com.delight.activities.HomeActivity.showHelp(HomeActivity.java:311)
行号 ft.commit()
上面代码中提到了HomeActivity.java 中的 311 。我的活动从兼容性库(最新更新)中扩展了 FragmentActivity。如果我使用show()
方法,也会发生同样的崩溃。
HelpDialogFragment hdf = HelpDialogFragment.newInstance();
hdf.show(getSupportFragmentManager(), "dialog"); #same crash here
所以我得出了一个getSupportFragmentManager()
导致我出现问题的结论,我不明白的是,我在代码的哪一部分使用了已被破坏的活动,据我所知,getSupportFragmentManager()
应该把经理还给我存在的活动。
我需要一些帮助来解决这个问题。