【Android】ルートのFragmentに戻す方法
notwork_android_rootfragment
スポンサーリンク

FragmentManagerでルートを取得する方法

何度か画面遷移を繰り返した末に最初の画面に戻る方法

ヒーラー
popBackStackで一気に最初の画面に戻したい

対処方法

FragmentManager.popBackStack()で、ひとつ前の画面へ戻すことができますが、いくつか飛ばして、最初の画面に戻したいことがあります。

結論から言うと以下の対応で可能です。

//ルート画面に戻る
val rootEntry = parentFragmentManager.getBackStackEntryAt(0)
parentFragmentManager.popBackStack(
        rootEntry.id,
        FragmentManager.POP_BACK_STACK_INCLUSIVE
)

なお、それまでの画面遷移の際には、以下のようにBackStackに追加している前提です。

parentFragmentManager.commit {
        addToBackStack(null)
        replace(R.id.container, nextFragment)
}

解説

parentFragmentManager.getBackStackEntryAt(0)で、0番目、つまり最初のスタックのインデックスを指定してBackStackEntryを取得し、そのIDとフラグにFragmentManager.POP_BACK_STACK_INCLUSIVEを指定すれば可能です。

ちなみに、スタックされたトランザクションの数は、
parentFragmentManager.getBackStackEntryCount()で取得することが可能です。
途中の画面に戻るのであれば、インデックスを知るために使えるかもしれません。

また、上記のIDの他に、途中の任意の画面へ戻るために、明示的に名前を付けて指定することも可能です。

//画面遷移時
parentFragmentManager.commit {
        addToBackStack("next")
        replace(R.id.container, nextFragment)
}
//next画面に戻る
parentFragmentManager.popBackStack("next", 0)

スポンサーリンク

Twitterでフォローしよう

おすすめの記事