Android Jetpack Navigation中NavHostFragment找不到的问题求助
这个错误的核心原因是依赖库版本和你使用的AndroidX类不匹配——你在XML布局里引用了AndroidX体系的NavHostFragment,但在build.gradle中导入的却是旧版Support Library体系的导航组件(android.arch.navigation),两者完全不兼容,导致系统找不到对应的类。
步骤1:替换导航组件依赖为AndroidX版本
打开你的Module级别build.gradle,把旧版导航依赖替换成AndroidX版本:
原来的依赖代码:
def nav_version = "1.0.0-alpha01" implementation "android.arch.navigation:navigation-fragment-ktx:$nav_version" implementation "android.arch.navigation:navigation-ui-ktx:$nav_version"
替换为AndroidX版本(建议使用稳定版,alpha版本bug较多):
def nav_version = "2.3.5" // 可根据需求选择更高的稳定版本 implementation "androidx.navigation:navigation-fragment-ktx:$nav_version" implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
步骤2:修复Activity中的导航代码错误
你当前Activity里获取NavController的方式有误,findNavController(item.itemId)是错误用法,应该通过nav_host_fragment的ID来获取导航控制器:
修改后的Activity代码:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_home_page) // 获取NavHostFragment对应的NavController val navController = Navigation.findNavController(this, R.id.nav_host_fragment) // 处理底部导航栏点击事件 bottom_navigation_view_homepage_activity.setOnNavigationItemSelectedListener { item -> when (item.itemId) { R.id.action_appointment -> navController.navigate(R.id.appointmentFragment) R.id.action_chat -> navController.navigate(R.id.chatFragment) } true // 返回true表示已处理该点击,确保选中状态正常更新 } }
步骤3:同步并重建项目
- 点击Android Studio工具栏的
Sync Project with Gradle Files按钮,等待依赖同步完成 - 依次执行
Build > Clean Project和Build > Rebuild Project,清理旧编译文件并重新构建
完成以上步骤后,NavHostFragment类找不到的问题应该就能解决了。
内容的提问来源于stack exchange,提问作者Mehul Kanzariya
相关产品推荐
相关产品推荐

