【问题标题】:Not getting current fragment id using navController.currentDestination?.id没有使用 navController.currentDestination?.id 获取当前片段 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 谢谢。你能解释一下发生了什么吗?我是编程新手。如果可能,将其粘贴到答案中。

标签: android kotlin fragment


【解决方案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,然后检查您现在所在的片段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    相关资源
    最近更新 更多