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)