読者です 読者をやめる 読者になる 読者になる

プログラマってこんなかんじ??

アプリ作ったり歌ったりしてます

DialogFragment使用時に画面の回転で例外発生(InstantiationException)

android

DialogFragment を private なインナークラスで定義してたら、
画面の回転(Activity再生成) でアプリが落ちてしまった。

出力された例外はこれ。

Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fragment ErrorCaseDialogFragment: 
make sure class name exists, is public, and has an empty constructor that is public

Fragment が private なインナークラスなので、
外部からコンストラクタ呼び出せなくて例外になった様子。

使用したコードはこんなかんじ。



ErrorCaseDialogFragment のクラス定義を

private static ErrorCaseDialogFragment
↓
public static ErrorCaseDialogFragment

こう修正したら普通に動くけども。
こうするくらいならFragmentを外部ファイルにした方がいいですよねw


というわけで。

結論

Activity再生成時に自動生成するFragmentは、
空のpublicコンストラクタが外部から呼び出せるように
privateなインナークラスではなく publicなクラス にする。