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
我在 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