どの画面からもMainFragmentに一気に戻りたい場合はどうすればいいでしょうか。
直接線を引っ張っても良いのですが、画面が増えた場合に遷移グラフが複雑になりそうです。
どこからでも利用する遷移はGlobal Actionとして定義できます。
<navigation ... >
<action
android:id="@+id/action_global_go_main"
app:destination="@id/mainFragment"
app:popUpTo="@id/main_navigation"
app:popUpToInclusive="true"/>
</navigation>
actionの定義がfragmentの外にあり、文字通りグローバルに使用できるようになっています。乱用すると遷移グラフを定義した意味がなくなるので、ルート画面への強制遷移のような頻出パターンのみに限定して使うと良いかと思います。
この場合、バックスタックを消さないと
MainFragment -> NextFragment1 -> NextFragment2 -> MainFragment
のようなスタックになり、BackキーでMainFragmentからNextFragment2に戻れてしまいます。
popUpToInclusive="true"の時、popUpToはバックスタックを全てpopする挙動になるため、これを指定しています。この際指定するIDはFragmentではなく、NavigationのIDになります。

0 件のコメント :
コメントを投稿