【问题标题】:Android Unresolved reference: findNavController errorAndroid 未解决的参考:findNavController 错误
【发布时间】: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 它在片段内。

标签: android kotlin navigationcontroller android-jetpack


【解决方案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.

【讨论】:

    猜你喜欢
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    • 2020-12-09
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 2020-11-24
    相关资源
    最近更新 更多