Navigation + DialogFragment

Kenji Abe

Navigationを使って、DialogFragmentを表示する方法です。
便利なような、そうじゃないような微妙な感じですが、やってみました。

Feature Requestはすでにあるので、そのうちちゃんと実装されるかもです。

Navigation自体の使い方は省略します。最後の方にサンプルリポジトリ置いてます。

build.gradle

DialogFragment

表示するDialogFragmentを作っておきます。

最初は SimpleDialogArgs でエラーになりますが、これはあとで navigation.xml を設定したらエラーがなくなります。

Navigator

画面遷移を定義する処理になります。xmlからFragmentクラス名を取得して、インスタンスを作って表示します。

少しコメント書いてますので、参考にしてみてください。
ここでも SimpleDialogArgs 使ってますが、一旦エラーになります。

navigation.xml

最初はGUIで設定したいので、DialogFragmentを普通のFragmentと同じように設定します。 Arguments に引数を設定します。今回は title message requestCode を設定しました。

Global Action

次にGlobal Actionを設定します。これを使うことで、共通の画面遷移を行うことができるようになります。

右クリックから、Add Action > Global を選択すると作成されます。詳しいことはドキュメントを見ていただければと思います。

xmlを編集

このままだと普通のFragmentとして扱われて、うまく表示できないので、タグをfragmentからNavigatorに設定したタグに変更します。

Activity

次にActivityですが、ここでは注意が必要です。レイアウトxmlのほうでは、 app:navGraph はxmlで設定しないようにします。ここで設定してしまうと、navigation設定を読み込もうとしますが、まだ何もしてないので新しいタグの dialog_fragment でエラーになります。

実際のActivityのコードは次のようになります。ポイントは今回のNavigatorを追加してから、graphを設定するようにします。

使ってみる

ここまで設定したら実際に使えると思います。引数を設定して呼ぶだけです。

サンプルリポジトリ

Kenji Abe

Written by

Kenji Abe

Programmer / Gamer

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade