Android 未解决的参考:findNavController 错误

Posted

技术标签:

【中文标题】Android 未解决的参考:findNavController 错误【英文标题】:Android Unresolved reference: findNavController error 【发布时间】:2019-01-24 04:20:07 【问题描述】:

我正在使用 Kotlin,并在我的项目中添加了所有引用。

// Navigation
implementation "android.arch.navigation:navigation-common-ktx:$rootProject.nav_version"
implementation "android.arch.navigation:navigation-fragment-ktx:$rootProject.nav_version"
implementation "android.arch.navigation:navigation-runtime-ktx:$rootProject.nav_version"
implementation "android.arch.navigation:navigation-ui-ktx:$rootProject.nav_version"

我在 build.gradle 上也有这些

apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' apply plugin: 'androidx.navigation.safeargs'

我在片段中这样使用它

class HomeFragment : BaseFragment()

    ...

    override fun onCategoryItemClicked(category: Category) 
        view.findNavController()?.navigate(R.id.phrasesFragment)
    

我也可以看到这个生成的扩展(文件)

fun Fragment.findNavController(): NavController =
    NavHostFragment.findNavController(this)

【问题讨论】:

我猜视图不是片段 NavHostFragment.findNavController(fragment) 适用于包含子片段的容器片段。如果您想在活动中访问NavController 以获取片段定义,请使用View.findNavController() 方法 @TimCastelijns 这是一个片段 @HawkPriest 它在片段内。 【参考方案1】:

经过多次尝试和错误,我找到了问题的根源。将我的 gradle 升级到 gradle:3.3.0-alpha06 是关键。我将它恢复到以前的版本,现在它工作正常。 所以我认为那里正在发生一些事情,需要由#Google 解决。

dependencies 
    classpath 'com.android.tools.build:gradle:3.3.0-alpha05'

顺便说一句,在使用最新版本的 gradle 时(在撰写本文时,我的意思是 gradle:3.3.0-alpha06),这将起作用

    Navigation.findNavController(view!!).navigate(R.id.phrasesFragment)

而不是

override fun onCategoryItemClicked(category: Category) 
    view.findNavController()?.navigate(R.id.phrasesFragment)

【讨论】:

感谢提醒,这对我来说也是一个非常令人沮丧的问题。新的 Gradle 更新破坏了我使用的一半依赖项。今天做了一场大乱斗!来谷歌吧!做得更好! 我也注意到了这一点,但起初我很难做到,因为我升级了不同的东西以及 gradle 插件issuetracker.google.com/issues/112806420 @DanieleSegato 我提出了一个针对 Gradle 的问题,但结果是它的 google 或 android studio 问题,所以我不知道在哪里提出它! 在 Android 问题跟踪器上有多个关于此的问题,只需给它们加星标 :-)【参考方案2】:

就我而言,降级导航库会有所帮助。

我从2.3.5 降级到2.3.4

implementation 'androidx.navigation:navigation-ui-ktx:2.3.4'
implementation 'androidx.navigation:navigation-fragment-ktx:2.3.4'

2.3.5 在撰写此答案时是最新的稳定版。

只需尝试更改库的版本,看看哪个有效。 Find versions here.

【讨论】:

以上是关于Android 未解决的参考:findNavController 错误的主要内容,如果未能解决你的问题,请参考以下文章

`未解决的参考:新的 Flutter 项目上的 android`

未解决的参考:viewModelScope - Kotlin Android

Android中的Firebase:firestore是未解决的参考

未解决的参考匕首 2 + kotlin + android gradle

未解决的参考@HiltAndroidApp 或 Android 中的任何其他 Hilt 注释

Android Kotlin:错误未解决参考:DaggerAppComponent