没有使用 navController.currentDestination?.id 获取当前片段 ID

Posted

技术标签:

【中文标题】没有使用 navController.currentDestination?.id 获取当前片段 ID【英文标题】:Not getting current fragment id using navController.currentDestination?.id 【发布时间】:2022-01-05 12:25:12 【问题描述】:

我有一个带有按钮的活动,在它下面我有带有 3 个片段的 navhost 片段。 但是当我点击按钮没有任何反应时,我很厚,因为片段的 id 没有得到。 这是我的代码:

class MainActivity : AppCompatActivity() 

    private lateinit var binding: ActivityMainBinding


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

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

        binding.myButton.setOnClickListener 
            if (id == R.id.firstFragment) 
                navController.navigate(R.id.goto_secondFragment)
            
            if (id == R.id.secondFragment) 
                navController.navigate(R.id.goto_thirdFragment)

            
        
    


【问题讨论】:

navController = findNavController(R.id.nav_host_fragment) 不幸的是,这不起作用Activity does not have a NavController set on 这就是我尝试使用val navHostFragment = supportFragmentManager.findFragmentById(R.id.navHost) as NavHostFragment val navController = navHostFragment.navController val id = navController.currentDestination?.id的主要原因 val id = navController.currentDestination?.id 在检查 id 之前点击添加这行代码。 @Zurmati 谢谢。你能解释一下发生了什么吗?我是编程新手。如果可能,将其粘贴到答案中。 【参考方案1】:

问题是您只获得一次 currentDestination id,因为 onCreate 在创建活动时被调用,并且您想在单击 Button 时检查当前在哪个片段上,所以只需移动

这个

val id = navController.currentDestination?.id

点击按钮进入

喜欢这个

        binding.myButton.setOnClickListener 
           val id = navController.currentDestination?.id
            if (id == R.id.firstFragment) 
                navController.navigate(R.id.goto_secondFragment)
            
            if (id == R.id.secondFragment) 
                navController.navigate(R.id.goto_thirdFragment)

            
        

现在会发生的是,当您单击下一个或上一个按钮时,它将首先获取当前目标 ID,然后检查您现在所在的片段。

【讨论】:

以上是关于没有使用 navController.currentDestination?.id 获取当前片段 ID的主要内容,如果未能解决你的问题,请参考以下文章

没有使用重要位置监控的互联网没有位置坐标

有没有使用xware的

使用 AVAudioPlayer 没有声音

[JavaScript]有没有办法在没有终端的情况下使用 Cloudinary

为啥我没有成功以编程方式使用 segue?

ServiceStack RedisMessageQueueClient:错误没有返回到ReplyTo地址,也没有使用RetryAttempts?