[英]why is when fragment is hidden, onStop isn't called?
我將底部導航附加到我的應用程序並調用 changeFragment。 當我調用 changeFragment 時,例如,A 片段到 B 片段,我期望在 A 片段處調用 onStop。 然而,任何生命周期回調都沒有被調用。為什么會這樣?
這是我的代碼..
private fun setBottomNavigation() {
binding.bottomNavigation.run {
setOnItemSelectedListener { menu ->
when (menu.itemId) {
R.id.navigation_menu_main ->
changeFragment(mainFragment, MainFragment.TAG, menu.itemId)
R.id.navigation_menu_money ->
changeFragment(moneyFragment, MoneyFragment.TAG, menu.itemId)
R.id.navigation_menu_life ->
changeFragment(lifeFragment, LifeFragment.TAG, menu.itemId)
R.id.navigation_menu_food ->
changeFragment(foodFragment, FoodFragment.TAG, menu.itemId)
R.id.navigation_menu_menu ->
changeFragment(menuFragment, MenuFragment.TAG, menu.itemId)
else -> false
}
}
selectedItemId = R.id.navigation_menu_main
}
}
private fun changeFragment(fragment: Fragment, tag: String, menuId: Int): Boolean {
supportFragmentManager.commit {
hide(currentFragment)
showFragment(fragment, tag)
}
currentFragment = fragment
return true
}
private fun FragmentTransaction.showFragment(fragment: Fragment, tag: String) {
supportFragmentManager.executePendingTransactions()
if (fragment.isAdded) {
show(fragment)
} else {
add(binding.container.id, fragment, tag).show(fragment)
}
}
您可以使用add()
和replace()
來更改活動中的片段。 add
和replace
之間的區別在於:
add
只是將另一個片段添加到片段容器中,並且不會破壞現有片段,因此它們保持活動狀態並且不會調用這些現有片段的生命周期事件。
replace
刪除現有片段以添加新片段,這意味着將調用 onPause、onStop 和 onCreateView 等生命周期事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.