【发布时间】:2012-07-22 08:17:20
【问题描述】:
我在活动中显示一个对话框片段,尝试使用 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)
行号HomeActivity.java 中的 311 是上面代码中提到的ft.commit()。我的活动从兼容性库(最新更新)中扩展了 FragmentActivity。如果我使用show() 方法,也会发生同样的崩溃。
HelpDialogFragment hdf = HelpDialogFragment.newInstance();
hdf.show(getSupportFragmentManager(), "dialog"); #same crash here
所以我得出一个结论,getSupportFragmentManager() 给我带来了问题,我不明白的是,据我所知,我在代码的哪一部分使用已被破坏的活动@ 987654327@ 应该将当前活动的经理返回给我。
我需要一些帮助来解决这个问题。
【问题讨论】:
-
您可以发布您的活动代码吗?
-
只是一个盲注,你有没有打电话给
super.onCreate(savedInstanceState);作为你Activity的onCreate()的第一个声明?
标签: android android-fragments android-dialog android-dialogfragment