安卓未解决的引用错误:findNavController错误

24

我正在使用 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'

在我的 Fragment 中,我是这样使用它的:

class HomeFragment : BaseFragment(){

    ...

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

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

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

1
我猜测视图不是一个片段。 - Tim
NavHostFragment.findNavController(fragment) 适用于包含子片段的容器片段。如果您想要访问活动中定义的片段的 NavController,请使用 View.findNavController() 方法。 - HawkPriest
@TimCastelijns 这是一个片段。 - Amir
@HawkPriest 它在片段内部。 - Amir
3个回答

8

经过多次尝试和错误,我找到了问题的根源。将我的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)
}

2
谢谢你提醒,这对我来说也是一个非常令人沮丧的问题。新的Gradle更新破坏了我使用的一半依赖项。今天变成了一场徒劳的追逐!拜托Google!做得更好点! - Patty P
我也注意到了这个问题,但起初我以为是其他原因,因为我同时升级了不同的东西和gradle插件。https://issuetracker.google.com/issues/112806420 - Daniele Segato
@DanieleSegato 我提出了一个Gradle的问题,但事实证明这是谷歌或安卓工作室的问题,所以我不知道该在哪里提出! - Amir
Android问题跟踪器上有多个关于此问题的问题,只需去给它们点赞即可 :-) - Daniele Segato

1
在我的情况下,降级导航库有所帮助。 我从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是回答撰写时最新的稳定版本。

尝试更改库的版本,看看哪个版本适用。在此处查找版本


-1

只需在您的build.gradle(:app)中添加以下内容 -

plugins {
    id 'kotlin-android-extensions'
}

1
kotlin-android-extensions 已被弃用,最好不要再使用它了。 https://developer.android.com/topic/libraries/view-binding/migration - Amir
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接