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()
ました。私が理解していないのは、コードのどの部分で破壊されたアクティビティを使用しているのかということです。私が理解している限りgetSupportFragmentManager()
、存在する活動。
この問題を解決するには、助けが必要です。