Я хочу возобновить фрагменты Android, которые находятся в backstack.При переключении между различными вкладками в нижней навигации, я не хочу, чтобы воссоздались виды фрагментов.
Я читаю это , это , это и некоторые другие вопросы, связанные со стековым потоком, связанные с этим.Распространенными предложениями является использование метода show and hide для фрагментных транзакций, но он не работает.Вот мой код котлина:
bottomnavigation.setOnNavigationItemSelectedListener {
item ->
when(item.itemId){
R.id.first_fragment_item -> {
var fragment:Fragment = FirstFragment.newInstance()
replaceFragment(fragment)
return@setOnNavigationItemSelectedListener true
}
R.id.second_fragment_item -> {
var fragment:Fragment = SecondFragment.newInstance()
replaceFragment(fragment)
return@setOnNavigationItemSelectedListener true
}
}
return@setOnNavigationItemSelectedListener false
}
}
fun replaceFragment(fragment:Fragment) {
var fragmentName:String = fragment::class.simpleName!!
if(supportFragmentManager.findFragmentByTag(fragmentName)==null) {
val fragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.fragment_container, fragment, fragmentName)
fragmentTransaction.addToBackStack(fragmentName)
fragmentTransaction.commit()
}
else{
if(fragmentName == "FirstFragment") {
supportFragmentManager.beginTransaction().
hide(supportFragmentManager.findFragmentByTag("SecondFragment"))
.show(supportFragmentManager.findFragmentByTag("FirstFragment"))
.commit()
}
else{
supportFragmentManager.beginTransaction()
.hide(supportFragmentManager.findFragmentByTag("FirstFragment"))
.show(supportFragmentManager.findFragmentByTag("SecondFragment"))
.commit()
}
}
}
Последний фрагмент backstack всегда отображается.Когда я хочу спрятать его и показать другой фрагмент, экран этого фрагмента становится белым, на нем ничего нет.
В моей нижней навигации есть четыре элемента, но для целей тестирования я использую только два.Два из фрагментов - это FirstFragment и SecondFragment.Я использую v4.app.fragments.