You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用navController.currentDestination?.id无法获取Fragment id导致按钮点击无响应

页面布局示意图

问题根因

你的代码核心问题是id变量的取值时机错误:你在Activity的onCreate生命周期中就获取了navController.currentDestination?.id,这个变量只会在Activity创建时赋值一次,后续导航切换Fragment时,该变量的值不会自动更新,因此点击按钮时的判断逻辑永远基于Activity初始化时的初始值,自然无法触发对应导航操作。

修正方案

将id的取值逻辑移到按钮点击事件的回调内部,每次点击时都获取当前的目的地ID即可,修正后代码如下:

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding
    private lateinit var navController: NavController

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

        val navHostFragment = supportFragmentManager.findFragmentById(R.id.navHost) as NavHostFragment
        navController = navHostFragment.navController

        binding.myButton.setOnClickListener {
            // 每次点击都实时获取当前的目的地ID
            val currentId = navController.currentDestination?.id
            if (currentId == R.id.firstFragment) {
                navController.navigate(R.id.goto_secondFragment)
            } else if (currentId == R.id.secondFragment) {
                navController.navigate(R.id.goto_thirdFragment)
            }
        }
    }
}

如果需要在目的地变化时同步更新按钮文案、显示状态等,也可以给navController添加OnDestinationChangedListener监听,在监听回调中处理相关逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:15:07