如何在Kotlin中结合Navigation Components使用NavigationRailView
原本使用BottomNavigationView配合Navigation Components开发的代码运行正常,但在横屏布局中替换为NavigationRailView后,调用binding.navigaitonRailView.setupWithNavController(navController)出现以下错误:
Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:
解决方案
1. 修正布局ID与代码拼写
首先检查代码中的拼写错误:你写的navigaitonRailView多了一个字母i,正确的ID应该是navigationRailView,确保横屏布局(如res/layout-land/activity_main.xml)中的NavigationRailView ID与代码一致:
<!-- 横屏布局中的NavigationRailView示例 --> <com.google.android.material.navigation.NavigationRailView android:id="@+id/navigationRailView" android:layout_width="wrap_content" android:layout_height="match_parent" android:background="@color/purple_500" app:itemIconTint="@drawable/bottom_nav_selector" app:itemTextColor="@drawable/bottom_nav_selector" app:menu="@menu/menu_history_navigation" app:labelVisibilityMode="selected" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/appbar" app:layout_constraintBottom_toBottomOf="parent"/>
2. 确保依赖与扩展函数导入
NavigationRailView的setupWithNavController扩展函数属于androidx.navigation:navigation-ui-ktx库,需确保Module级别的build.gradle(或build.gradle.kts)中包含该依赖:
// 替换$nav_version为你使用的Navigation版本,如2.7.6 implementation "androidx.navigation:navigation-fragment-ktx:$nav_version" implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
同时在Activity中导入对应的扩展函数:
import androidx.navigation.ui.setupWithNavController
3. 正确绑定NavController
保持原有NavController的获取逻辑不变,确保它来自正确的NavHostFragment:
private val navController: NavController by lazy { (supportFragmentManager.findFragmentById(R.id.historyNavHost) as NavHostFragment).navController }
4. 正确调用绑定方法
修正拼写后,调用正确的绑定代码:
binding.navigationRailView.setupWithNavController(navController)
内容的提问来源于stack exchange,提问作者Noor Ullah
相关产品推荐
相关产品推荐

