ダイアログを表示するときにやってしまった間違い~その2~

前回は、本家のドキュメントで「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.

悩むより調べろってことですね。


1 thoughts on “ダイアログを表示するときにやってしまった間違い~その2~

  1. ほげたろう

    たった今、悩み始めたばかりで、ハマるところでした。
    助かりました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.