#android #android-fragments #bottomnavigationview #android-framelayout
#Android #android-фрагменты #bottomnavigationview #android-framelayout
Вопрос:
Я использую BottomNavigationView с четырьмя страницами. Если я хочу добавить к этому 4 фрагмента, это нормально, но когда я хочу заменить новый фрагмент старым фрагментом на одной из страниц BottomNavigationView и восстановить его при нажатии элемента, первый фрагмент снова откроется. Как я могу восстановить последний фрагмент? Должен ли я использовать другое FrameLayout в первом BottomNavigationView?
Комментарии:
1. Нет. Используйте fragment как дочерний элемент основного фрагмента. Узнайте больше о менеджере дочерних фрагментов.
Ответ №1:
Попробуйте это:
bottomNavView.setOnNavigationItemSelectedListener(object : BottomNavigationView.OnNavigationItemSelectedListener {
override fun onNavigationItemSelected(item: MenuItem): Boolean {
clearAllBackStack()
when (item.itemId) {
R.id.itemHome -> {
// load fragment here
}
R.id.itemMyAccount -> {
// load fragment here
}
R.id.itemSettings -> {
// load fragment here
}
R.id.itemNotfications -> {
// load fragment here
}
}
return true
}
})
добавьте этот метод:
fun clearAllBackStack() {
for (i in 0 until supportFragmentManager.backStackEntryCount) {
supportFragmentManager.popBackStack()
}
}
Примечание: также добавляйте фрагмент в backstack всякий раз, когда вы загружаете fragment, добавляйте это при загрузке fragment: fragmentTransaction.addToBackStack(null)
Комментарии:
1. Итак, как я могу показать фрагмент из последнего состояния, когда я изменил элемент в BottomNavigationView, щелкнул?
2. Я не понял, какой поток вы хотите?
3. Например, в первом элементе BottomNavigatioView у меня есть фрагмент, который показывает список в нем. Если я нажимал на каждый элемент этого списка, открывался новый фрагмент, показывающий подробную информацию об элементе этого списка. Затем я переключился на другой элемент BottomNavigationView и снова вернулся к первому элементу BottomNavigationView. Теперь я хочу видеть фрагмент сведений, а не фрагмент списка.
4. добавьте этот FragmentTransaction.addToBackStack(null) для каждого фрагмента, который вы запускаете, и дайте мне знать, что произойдет
5. @behrooz.fard вы нашли решение? То, что говорит Сурадж, выглядит как неправильное