前回は、本家のドキュメントで「Creating a Dialog Fragment」の文字を見たところまで記述したと思う。
Fragment を利用すること自体は難しくなくActivity を作成するときにFragmentActivityを継承し、表示するダイアログはDialogFragmentを継承するだけだ。ダイアログを表示したいときは、DialogFragment.show()を呼び出せばよい。
FragmentActivity activity = (FragmentActivity) getContext(); DialogFragment fragment = HogeDialog.newInstance(<適当な引数>); fragment.show(activity.getSupportFragmentManager(), <適当なタグ名>);
上記のコードは、Fragment をAndroid 2.2系でも利用できるように「android.support.v4」のパッケージを利用している(FragmentはAndroid 3.0からのサポート)。実に情けないところにはまったのだが、最初はFragmentManagerを取得するためにActivity.getFragmentManager()を呼び出していた。取得できるのは、「android.app.FragmentManager」だ。Activity も ダイアログを表示するクラスも「android.support.v4」パッケージのクラスを継承しているので、コンパイルが通らない。エラーとして表示されたのは・・・
型 DialogFragment のメソッド show(FragmentManager, String) は引数 (FragmentManager, String) に適用できません
意味がわからない。適用できるようにしか見えません・・・
悩むことn時間。「android.support.v4」パッケージのクラスを使っているのだから、当然Activity.getFragmentManager()で「android.support.v4.app.FragmentManager」が取得できると思ってた自分がいけないことがわかった。android.support.v4.app.FragmentActivityの API の説明を読むとちゃんと書いてあった。
When using this class as opposed to new platform’s built-in fragment and loader support, you must use the getSupportFragmentManager() and getSupportLoaderManager() methods respectively to access those features.
悩むより調べろってことですね。
たった今、悩み始めたばかりで、ハマるところでした。
助かりました。