Android デベロッパーの皆さん、こんにちは。
私は 2 つの DialogFragments を連続させようとしているので、最初のものがキャンセルされると 2 番目のものがポップアップします。
これが私がこれまでに持っているものです:
私のアクティビティでは、次のメソッドを呼び出します。
void showFirstDialog() {
// Pass the context to do a callback
DialogFragment newFragment = ChangeDialogFragment.newInstance(mContext);
newFragment.show(getSupportFragmentManager(), "myFirstDialogTag");
}
私の DialogFragment には、キャンセルされることを検出する次のコードがあります。
@Override
public void onCancel(DialogInterface dialog) {
// Use Context to do a callback and inform the Activity that
// Fragment is cancelled
((Activity) mContext).firstDialogCanceled();
super.onCancel(dialog);
}
アクティビティに戻り、2 番目のダイアログを開始して、そのイベントに対応します。
void firstDialogCanceled {
DialogFragment newFragment = InformationDialogFragment.newInstance();
newFragment.show(getSupportFragmentManager(), "mySecondDialogTag");
}
最初のダイアログで向きを変更しない限り、これは完全に機能します。私が持っていると、次のエラーが表示されます。
java.lang.IllegalStateException: onSaveInstanceState の後にこのアクションを実行できません
この例外は、「newFragment.show(getSupportFragmentManager(), "mySecondDialogTag");」という行で発生します。
この問題を解決する方法を考えたのは、最初のダイアログを手動で閉じることです。私は次のことを試しました:
DialogFragment firstFragment = (DialogFragment) getSupportManager().findFragmentByTag("myFirstDialogTag");
firstFragment.dismiss();
ここでも、向きを変更することなく、すべてが正常に機能しています。最初のダイアログが画面に表示されているときに方向を変更すると、「firstFragment.dismiss()」行で NullPointerException が発生します。
なぜそれが起こっているのですか?FragmentManager が向きを変更した後に DialogFragment を忘れてしまうのはなぜですか。Androidリファレンスは次のように述べています。
show(FragmentManager, String) または show(FragmentTransaction, String) を使用して DialogFragment のインスタンスを UI に追加する必要があります。これらは、ダイアログが閉じられたときに DialogFragment が自身を削除する方法を追跡するためです。
私は show を使用していますが、まだ正しく動作していません。
どんなヒントでも大歓迎です!
乾杯 Ali3n