如何在使用View Binding时获取NavController?
你通过View Binding拿到NavHostFragment实例后,无需再通过ID查找,直接从实例中提取NavController即可:
Kotlin 实现代码
// 先将binding获取的fragment实例强转为NavHostFragment val navHostFragment = binding.navHostFragment as NavHostFragment // 直接获取对应的NavController val navController = navHostFragment.findNavController()
Java 实现代码
// 先将binding获取的fragment实例强转为NavHostFragment NavHostFragment navHostFragment = (NavHostFragment) binding.navHostFragment; // 获取NavController NavController navController = NavHostFragment.findNavController(navHostFragment);
注意事项
- 要确保布局中对应fragment标签的
android:name属性值为androidx.navigation.fragment.NavHostFragment,避免强转报错 - Activity中调用需要放在
setContentView(binding.root)之后,Fragment中调用需要放在onViewCreated生命周期中,避免空指针 - 该方案和你之前用ID查找的逻辑本质一致,原生API通过ID查找NavController时,内部也是先找到NavHostFragment实例再提取控制器,你已经拿到实例可以直接跳过ID查找步骤
内容的提问来源于stack exchange,提问作者Real Tech Hacks
相关产品推荐
相关产品推荐

