[Android]Navigation - どの画面からでもトップFragmentに戻る(グローバル アクション)

 


どの画面からも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 件のコメント :

コメントを投稿