Android Studio Bumblebee Navigation 无法访问 FragmentDirections 以进行操作

Android Studio Bumblebee Navigation can't access FragmentDirections for action

我在 Android Studio bumblebee 更新之前创建了这样的动作,它工作正常。

fragment_button.setOnClickListener{
val action = FeedFragmentDirections.actionFeedFragmentToCountryFragment()
Navigation.findNavController(it).navigate(action)
}

但是目前没有FragmentDirectionsaccessible.I不知道问题出在哪里,我想我无法添加导航。

我的build.gradle:

buildscript {
    dependencies {
        classpath("androidx.navigation:navigation-safe-args-gradle-plugin:2.4.0")
    }
}
plugins {
    id 'com.android.application' version '7.1.0' apply false
    id 'com.android.library' version '7.1.0' apply false
    id 'org.jetbrains.kotlin.android' version '1.6.10' apply false
    id 'androidx.navigation.safeargs.kotlin' version '2.4.0' apply false
    id 'com.google.gms.google-services' version '4.3.0' apply false

}

task clean(type: Delete) {
    delete rootProject.buildDir
}

我的 build.gradle 应用

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'kotlin-kapt'
    id 'kotlin-android-extensions'
}

android {
    dataBinding {
        enabled = true
}
dependencies {
    def navVersion = '2.4.0'

    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.appcompat:appcompat:1.4.1'
    implementation 'com.google.android.material:material:1.5.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

    implementation "androidx.navigation:navigation-fragment-ktx:$navVersion"
    implementation "androidx.navigation:navigation-ui-ktx:$navVersion"
}

您是否尝试过清洁和 re-building 您的项目?

这可能与以下情​​况类似:

如果不是,鉴于您在访问 FragmentDirections class 时遇到问题,这可能是由于默认添加了 non-transitive R class 属性大黄蜂更新。

在 gradle.properties[app] 文件中,您会发现:

# Enables namespacing of each library's R class so that its R class includes only the

# resources declared in the library itself and none from the library's dependencies,

# thereby reducing the size of the R class for that library

android.nonTransitiveRClass=true

迁移 R classes 的变化和解决方案的一个很好的总结可以在这里找到:

https://blog.blundellapps.co.uk/speed-up-your-build-non-transitive-r-files/

祝你好运!

我收回之前的回答!

经过一些研究,我意识到你 project-level build.gradle 中的插件块的目的是分配子项目可以使用的依赖项!

https://docs.gradle.org/current/userguide/plugins.html#sec:subprojects_plugins_dsl

而不是声明:

plugins {
...
id 'androidx.navigation.safeargs.kotlin' version '2.4.0' apply false
...                                                                     
}

您想将 id 'androidx.navigation.safeargs.kotlin' 添加到 app-level 插件块,以便它可以直接在您的项目中使用。

我通过清理我的项目并重建和添加解决了我的问题。

非常感谢您的支持

Build.gradle

id ("androidx.navigation.safeargs") 

建设


buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:7.0.4"
        classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10'

        def nav_version = "2.3.0"
        classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version")


    }
}

plugins {
    id 'com.android.application' version '7.1.0' apply false
    id 'com.android.library' version '7.1.0' apply false
    id 'org.jetbrains.kotlin.android' version '1.6.10' apply false
    id 'com.google.gms.google-services' version '4.3.0' apply false

}

task clean(type: Delete) {
    delete rootProject.buildDir
}

好的所以在 bumblebee 更新后 gradle 结构改变了。

但如上所述您仍然可以添加

buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath("androidx.navigation:navigation-safe-args-gradle-plugin:2.4.1")
    }
}

项目级别 gradle 中的插件{}之前。

但更好的选择是只使用

id 'androidx.navigation.safeargs.kotlin' version '2.4.1' apply false

在项目级别的插件中{} gradle

以上都涵盖了第一步,您还需要添加

id 'androidx.navigation.safeargs.kotlin'

在应用级别的插件中{} gradle

**如果您已经添加了这些但现在它们没有解析或无法访问片段方向,原因可能是因为您已将 gradle 更新到 7.1.0 和 safe-args-plugin:2.4 .0 与之不兼容,因此请确保使用 safe-args-plugin:2.4.1 或 2.5.0-alpha01 和 gradle 7.1.0