未解决的参考:向目标添加一些参数后的 NavArgs

Unresolved reference: NavArgs after added some arguments to destination

我正在做一个小项目并尝试使用新的导航架构组件。当我尝试向目的地添加一些参数时,出现 "Unresolved reference: NavArgs" 错误。

我遵循了这个指南https://developer.android.com/topic/libraries/architecture/navigation/navigation-pass-data#kotlin 并且已经添加

classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0-alpha11"

到我的项目 gradle 文件并添加

apply plugin: 'androidx.navigation.safeargs.kotlin'

到我的应用 gradle 文件。

如上面的指南所示,我想使用 val args: AddKittenFragmentArgs by navArgs() 来获取传递的参数。但是 navArgs() 无法识别。

此外,生成的代码中的 NavArgs 未解析。

data class MyFragmentArgs(val argOne: String? = "\"\"", val argTwo: String? = "\"\"") : NavArgs

根据该页面上的文档:

When using the -ktx dependencies, Kotlin users can also use the by navArgs() property delegate to access arguments.

确保您遵循 Adding Components documentation 并使用 navigation-fragment-ktx 依赖项:

implementation "android.arch.navigation:navigation-fragment-ktx:1.0.0-alpha11"

我遇到了同样的问题,直到我意识到导航组件的项目依赖项使用的版本与插件指定的版本(在类路径中)不同。

即在项目的build.gradle

classpath 'android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0-beta01'

在应用程序中 build.gradle

// Navigation
implementation 'android.arch.navigation:navigation-fragment-ktx:'+ rootProject.navigationVersion
implementation 'android.arch.navigation:navigation-ui-ktx:' + rootProject.navigationVersion

其中 navigationVersion

ext {
   ...
   navigationVersion = "1.0.0-alpha08"
}

lint 不会在插入依赖项时告诉您库有更新。

最新发布的1.0.0版本似乎已经解决了这个问题。只需将导航依赖项版本更改为 1.0.0 并添加其他答案中提到的 -ktx 依赖项,一切都应该有效。

我通过 Android Studio 的 Build 菜单中的 Clean Project 解决了这个问题。

转到菜单:Build >> Clean Project

仅供参考,如果你想传递 String 你的 argType 应该是 string 而不是字符串。

 app:argType="string"

我遇到了同样的问题,我通过执行以下步骤解决了这个问题

  1. Build -> Clean Project
  2. nav_graph.xml 文件中删除参数
  3. 创建新参数
  4. Build -> Rebuild Project
  5. 设置参数
val action: NavDirections = AreThereAnyDecayedTeethInTheAreaOfPainFragmentDirections
                .actionAreThereAnyDecayedTeethInTheAreaOfPainFragmentToResultFragment(
                    finalresult = "somethings"
                )
  1. 在 FragmentDest 上使用此参数
        arguments.let {
            binding.board.text = ResultFragmentArgs.fromBundle(it!!).finalresult
        }

在我的例子中,我需要在我的 build.gradle (app)

中添加它
kotlinOptions {
    jvmTarget = '1.8'
}

在我的例子中,我输入了以大写字母开头的参数名称

        <argument
            android:name="MyArgument" // changed it to myArgument fix the problem
            app:argType="string"
            app:nullable="false" />