簡體   English   中英

為什么隱藏片段時不調用 onStop?

[英]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()來更改活動中的片段。 addreplace之間的區別在於:

add只是將另一個片段添加到片段容器中,並且不會破壞現有片段,因此它們保持活動狀態並且不會調用這些現有片段的生命周期事件。

replace刪除現有片段以添加新片段,這意味着將調用 onPause、onStop 和 onCreateView 等生命周期事件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM