Android Jetpack Navigation, BottomNavigationView with Youtube or Instagram like proper back navigation (fragment back stack)?

前端 未结 13 1990
误落风尘
误落风尘 2020-12-12 10:25

Android Jetpack Navigation, BottomNavigationView with auto fragment back stack on back button click?

What I wanted, after choosing multiple tabs one after another by

13条回答
  •  野趣味
    野趣味 (楼主)
    2020-12-12 11:25

    I didn't find any official solutions, but I use my own way

    First, I create Stack for handle fragments

        needToAddToBackStack : Boolen = true
    
    
        private lateinit var fragmentBackStack: Stack
        fragmentBackStack = Stack()
    

    and in

    navController.addOnDestinationChangedListener { _, destination, _ ->
            if (needToAddToBackStack) {
                fragmentBackStack.add(destination.id)
            }
    
    
            needToAddToBackStack = true
    
        }
    

    and handle the back button

    override fun onBackPressed() {
        if (::fragmentBackStack.isInitialized && fragmentBackStack.size > 1) {
            fragmentBackStack.pop()
            val fragmentId = fragmentBackStack.lastElement()
            needToAddToBackStack = false
            navController.navigate(fragmentId)
    
        } else {
            if (::fragmentBackStack.isInitialized && fragmentBackStack.size == 1) {
                finish()
            } else {
                super.onBackPressed()
            }
        }
    

提交回复
热议问题