備忘録 〜プログラミング〜

プログラミングに関する事をつらつらと、、

DialogFragment表示時に出た、java.lang.IllegalStateException

DialogFragmentを継承した独自クラスを作成し、ボタンをタップしたときにshowメソッドでdialogを表示させる実装をしていたのですが、ボタンをタップしてすぐにViewの切り替えを行ったとき、

Error Can not perform this action after onSaveInstanceState

このようなエラーが出るようになってしまいました。
この場合、

SampleDialogFragment dialog = new SampleDialogFragment();
dialog.show(getSupportFragmentManager(), "sampleDialog");

こちらではなく、

SampleDialogFragment dialog = new SampleDialogFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(dialog, null);
ft.commitAllowingStateLoss();

こちらのようにcommitAllowingStateLossで呼び出す必要があるようでした。

java - Actions in onActivityResult and "Error Can not perform this action after onSaveInstanceState" - Stack Overflow

ただ、こちらのメソッドには色々弊害などもあるようで、詳しくはこちらに書かれていました。

Android - Fragment使用時のIllegalStateException回避 - Qiita