Я пытаюсь сделать следующее:
- Запустить приложение - Фрагмент A загружает
- Нажмите кнопку A - Фрагмент B загрузит
- Нажмите кнопку наB - Фрагмент A загружает
Этот метод в MainActivity:
private fun addBrowseBooksFragment() {
var browseBooksFragment = BrowseBooksFragment()
val fragmentManager = fragmentManager
val fragmentTransaction = fragmentManager.beginTransaction()
if ((fragmentManager.findFragmentByTag("BrowseBooksFragment")) != null){
browseBooksFragment = fragmentManager.findFragmentByTag("BrowseBooksFragment") as BrowseBooksFragment
println("working fine up to here")
if (browseBooksFragment.isAdded) {
println("Showing Added Fragment")
browseBooksFragment.setCallBackInterface(this)
fragmentTransaction.show(browseBooksFragment)
}
} else {
browseBooksFragment.setCallBackInterface(this)
fragmentTransaction.replace(R.id.fragmentContainer, browseBooksFragment, "BrowseBooksFragment")
}
fragmentTransaction.commit()
}
else
работает нормально, поскольку фрагмент A загружается без проблем.Фрагмент Б также загружается без проблем.Но когда я нажимаю кнопку, чтобы вернуться к фрагменту A, browseBooksFragment.isAdded
возвращает значение false, но browseBooksFragment
не равно нулю.Он возвращает фрагмент по тегу.
Я пытаюсь избежать воссоздания всего фрагмента, не используя replace
, а вместо этого использую show
.
. Я должен добавить, что если я закомментируюусловие isAdded
и изменение show
на replace
, я получаю уже добавленный фрагмент исключение.
// if (browseBooksFragment.isAdded) {
println("Showing Added Fragment")
browseBooksFragment.setCallBackInterface(this)
fragmentTransaction.replace(R.id.fragmentContainer, browseBooksFragment, "BrowseBooksFragment")
// fragmentTransaction.show(browseBooksFragment)
// }
Как правильно отобразить уже добавленный фрагмент A?