Nested NavigationとSafeArgs

Kenji Abe
May 27, 2019

--

Photo by Brendan Church on Unsplash

Nested Navigation Graphを使った際、SafeArgsのコード生成でうまくいかないので、少し工夫をする必要があります。

環境

  • Android Studio 3.5 beta2
  • Navigation 2.1.0-alpha04

Nested Graph

Navigationは入れ子にすることが可能です。例としては以下の感じです。
navigation タグの中に、更に navigation タグを入れることができます。
(XMLは省略してる部分があります。)

Designで見るとこんな感じです。

Nested Graphに引数を渡す

先程の例でfirstからNested Graph内にあるsecondに引数を渡す方法です。

素直にやろうとすると、XMLはこんな感じになります。

このとき、SafeArgsが生成するコードを使うと次のようになります。

この生成されたコードでは引数を渡すことができません。

これを解決するには、以下のようにNested Graph直下に argument を指定してあげます。

このとき生成するコードでは、引数を渡すことが可能になります。

includeの場合

先程は同じnavigationファイルでしたが、 include タグを使って別のnavigationファイルを参照することができます。

この場合に引数を渡したい場合は、別の方法が必要になります。

includeを使った場合は、 action タグ内に argument を追加します。

これで、引数を渡すコードが生成されるようになります。

正直、あまり良い解決方法ではないのですが、現状ではSafeArgsのコード生成がそこまで考慮されていない感じです。

一応バグレポートは出てるのですが、大きく変更が必要な感じがするので、結構厳しい気がします。

--

--

Kenji Abe
Kenji Abe

Written by Kenji Abe

Programmer / Gamer / Google Developers Expert for Android, Kotlin / @STAR_ZERO

No responses yet