You need to enable JavaScript to run this app. Android使用FragmentContainerView时Up按钮点击关闭应用而非返回上一Fragment
优惠活动
大模型
产品
解决方案
定价
更多

Android使用FragmentContainerView时Up按钮点击关闭应用而非返回上一Fragment

问题原因

你当前遇到的Toolbar Up按钮行为异常,是因为没有在Activity中重写onSupportNavigateUp()方法。该方法负责接管顶部Up按钮的点击导航逻辑,未重写时Up按钮不会触发Navigation组件的回退栈处理逻辑,会直接执行Activity的默认返回行为,最终导致应用被关闭。

解决方案

只需要对HomeActivity代码做两处修改即可解决问题:

  1. 将navController从onCreate的局部变量提升为全局类成员变量,方便重写方法时调用
  2. 重写onSupportNavigateUp()方法,将Up按钮的处理逻辑交给Navigation组件

修改后的完整HomeActivity代码如下:

class HomeActivity : AppCompatActivity() {

    private lateinit var binding: ActivityHomeBinding
    private val viewModel: HomeActivityViewModel by viewModels()
    // 提升为类成员变量
    private lateinit var navController: NavController

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = ActivityHomeBinding.inflate(layoutInflater)
        setContentView(binding.root)
        setSupportActionBar(binding.homeToolbar)

        val navView: BottomNavigationView = binding.navView
        val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment_activity_home) as NavHostFragment
        // 赋值给类成员变量
        navController = navHostFragment.navController

        // Passing each menu ID as a set of Ids because each
        // menu should be considered as top level destinations.
        val appBarConfiguration = AppBarConfiguration(
            setOf(
                R.id.navigation_home,
                R.id.navigation_fragment_a,
                R.id.navigation_notifications
            )
        )
        setupActionBarWithNavController(navController, appBarConfiguration)
        navView.setupWithNavController(navController)
    }

    // 重写Up按钮处理逻辑
    override fun onSupportNavigateUp(): Boolean {
        return navController.navigateUp() || super.onSupportNavigateUp()
    }
}

效果验证

修改完成后重新运行应用:

  • 从Fragment A跳转到Fragment B后点击Up按钮,会正常回退到Fragment A
  • 当回退到AppBarConfiguration中配置的顶级目的地时,Up按钮会自动隐藏,符合官方导航设计规范
  • 系统返回键的原有行为不受任何影响

内容的提问来源于stack exchange,提问作者blow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 10:45:04