Если я понял вашу проблему, вы хотите, чтобы обратное нажатие вернуло вам один фрагмент вместо выхода из приложения, верно?
Если это так, то вам нужно либо реализовать свою собственную логику, чтобы «заменить» фрагмент onBackPressed()
override fun onBackPressed() {
// checking which is the current fragment and loading the proper one
when(supportFragmentManager.findFragmentById(R.id.frameLayout)){
is Fragment3 -> loadFragment(Fragment2.newInstance())
is Fragment2 -> loadFragment(Fragment1.newInstance())
else -> super.onBackPressed()
}
}
, либо вместо этого можно add()
ваш фрагмент.
private fun loadFragment(fragment: Fragment) {
val transaction = supportFragmentManager.beginTransaction()
transaction.add(R.id.frameLayout, fragment)
transaction.addToBackStack(null)
transaction.commit()
}
Поскольку вы заменяете фрагмент при загрузке, это означает, что у backstack есть только один его экземпляр, поэтому при вызове с нажатой спиной он извлекает единственный экземпляр и закрывает приложение.