0

我在 Android Studio bumblebee 更新之前创建了这样的操作,它运行良好。

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

但是目前 FragmentDirections 无法访问。我不知道问题出在哪里,我想我无法设法添加导航。

我的 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"
}
4

4 回答 4

1

好的,所以在 bumblebee 更新后,gradle 结构发生了变化。

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

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

在项目级 gradle 中的 plugins{} 之前。

但更好的选择是只使用

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 与该不兼容,因此请制作确保在 gradle 7.1.0 中使用safe -args-plugin:2.4.1 或 2.5.0-alpha01

于 2022-02-09T18:22:11.677 回答
0

您是否尝试过清理和重新构建您的项目?

这可能与以下情​​况类似:Safeargs library doesn't generate direction class

如果不是,假设您在访问 FragmentDirections 类时遇到问题,可能是由于在 Bumblebee 更新中默认添加了非传递 R 类属性。

在 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 类的更改和解决方案的一个很好的总结:

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

祝你好运!

于 2022-02-06T01:43:00.427 回答
0

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

非常感谢您的支持

构建.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
}

于 2022-02-06T03:52:46.740 回答
0

我收回之前的回答!

经过一番研究,我意识到您的项目级 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'到应用程序级插件块,以便可以直接在您的项目中使用它。

于 2022-02-06T03:28:32.393 回答