Android未解决的参考:findNavController错误

时间:2018-08-17 07:04:54

标签: android kotlin navigationcontroller android-jetpack

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分: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 在撰写此答案时最新稳定。

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