Custom “navigate up” behavior for certain fragment using Navigation component

前端 未结 4 498
心在旅途
心在旅途 2021-02-04 01:58

I want to add custom up navigation from fragment using Navigation component

In my build.gradle(app) I use androidx.appcompat:appcompat:1.1.0-

4条回答
  •  刺人心
    刺人心 (楼主)
    2021-02-04 02:44

    I found a solution

    handleOnBackPressed() method invokes only on device's back button click. I wonder, why neither onOptionsItemSelected() nor onSupportNavigateUp() methods haven't been called on pressing "up button" in toolbar. And the answer is I used

    NavigationUI.setupWithNavController(toolbar, navController, appBarConfiguration)
    

    in activity to setup toolbar with navigation component. And that made toolbar responsive for work with navigation internally, pressing "up button" haven't invoked any of overridden methods in activity or fragments.

    Instead should be used

    NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration)
    

    That will make actionBar responsive for navigation, thus I can use overridden functions onOptionsItemSelected() and onSupportNavigateUp() And best place (in my case) to add custom behavior on "up button" click for certain screen is

    onSupportNavigateUp()
    

    of hosted activity, like that

    override fun onSupportNavigateUp(): Boolean {
            val navController = this.findNavController(R.id.mainNavHostFragment)
            return when(navController.currentDestination?.id) {
                R.id.destinationOfInterest -> {
                    // custom behavior here 
                    true
                }
                else -> navController.navigateUp()
            }
    }
    

    But worth to say, that if you want implement custom behavior directly in fragment, answer of @Enzokie should work like a charm

提交回复
热议问题