Делая это вручную
Вы можете обнаружить кнопку возврата с помощью onBackPressed()
, проверить, есть ли уже фрагмент в стеке, используя getBackStackEntryCount()
, и если нет ни одного , замените fragment3
, используя fragment2
(без добавления fragment3
в backstack).
Повторите это для fragment1
. Вы, вероятно, захотите построить свою навигацию так, чтобы это не выглядело как взлом. В основном, если вы находитесь на фрагменте не root в дереве навигации, но задний стек пуст, замените фрагмент вручную.
Использование библиотеки
Если вместо написания решения самостоятельно вы предпочитаете какую-то стандартную библиотеку для его обслуживания, тогда Jetpack Navigation - это официальная опция, которую вы, возможно, захотите check.
Согласно документации:
Компонент Navigation поддерживает глубокое связывание и воссоздает реалистичный c задний стек для вас при связывании с любым пунктом назначения в вашем навигационном графе.
https://developer.android.com/guide/navigation/navigation-principles