Android导航组件-设置HasOptionsMenu使NavigateUp按钮无效

问题描述

我正在将Android导航组件与bottomNavigationView一起使用。我已经在MainActivity中配置了AppBar,以便当应用程序不在图形的开始目标上时出现“向上导航”按钮。

我已设置SupportedActionBar并覆盖onSupportNavigateUp,如下所示:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)
    setSupportActionBar(binding.mainToolbar)

    ...

    val controller = binding.bottomNavView.setupWithNavController(
        navGraphIds = navGraphIds,fragmentManager = supportFragmentManager,containerId = R.id.nav_host_container,intent = intent
    )

    controller.observe(this,Observer { navController ->
        appBarConfiguration = AppBarConfiguration(
            topLevelDestinationIds = setof(
                navController.graph.startDestination,R.id.navigation_level_up_onboarding
            )
        )

        setupActionBarWithNavController(navController,appBarConfiguration)
    })
    currentController = controller
}

override fun onSupportNavigateUp(): Boolean {
    return currentController?.value?.navigateUp() ?: false
}

在导航图中,我有一个目的地ProfileSettingsFragment,该目的地需要菜单选项。我将它们设置为:

override fun onViewCreated(view: View,savedInstanceState: Bundle?) {
    super.onViewCreated(view,savedInstanceState)
    setHasOptionsMenu(true)

    ....
}

override fun onCreateOptionsMenu(menu: Menu,inflater: MenuInflater) {
    inflater.inflate(R.menu.profile_settings_menu,menu)
    super.onCreateOptionsMenu(menu,inflater)
}

菜单选项可以正常工作,但是,一旦我呼叫setHasOptionsMenu(true),NavigatorUp按钮就不再对此片段起作用。

我在做什么错?使用导航组件时,要在片段上添加菜单选项并保持NavigationUp行为的正确方法是什么?

解决方法

因为您使用的是print([sum(number ** 2 for number in list) for list in k]) 而不是

Toolbar

您可以使用

setupActionBarWithNavController(navController,appBarConfiguration)

,您无需覆盖toolbar.setupWithNavController(navController,appBarConfiguration) 方法。