没有使用 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的主要内容,如果未能解决你的问题,请参考以下文章
[JavaScript]有没有办法在没有终端的情况下使用 Cloudinary
ServiceStack RedisMessageQueueClient:错误没有返回到ReplyTo地址,也没有使用RetryAttempts?