19

我正在做一个小项目并尝试使用新的导航架构组件。当我尝试向目的地添加一些参数时,出现“未解决的参考: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
4

8 回答 8

10

根据该页面上的文档:

在使用-ktx依赖项时,Kotlin 用户还可以使用 by navArgs() 属性委托来访问参数。

确保您遵循添加组件文档并使用navigation-fragment-ktx依赖项:

implementation "android.arch.navigation:navigation-fragment-ktx:1.0.0-alpha11"
于 2019-01-24T21:53:20.260 回答
6

在我的情况下,我输入了以大写字母开头的参数名称

        <argument
            android:name="MyArgument" // changed it to myArgument fix the problem
            app:argType="string"
            app:nullable="false" />
于 2021-08-21T13:01:22.497 回答
5

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

即在项目的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

导航版本在哪里

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

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

于 2019-02-10T21:43:03.700 回答
4

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

转到菜单:Build>>Clean Project

于 2019-06-28T07:34:18.767 回答
3

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

  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
        }
于 2021-01-23T13:16:12.033 回答
2

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

 app:argType="string"
于 2020-02-08T11:25:59.897 回答
1

在我的情况下,我需要在我的 build.gradle (应用程序)中添加它

kotlinOptions {
    jvmTarget = '1.8'
}
于 2021-05-26T16:57:04.577 回答
0

最新版本 1.0.0 似乎已修复此问题。只需将导航依赖项版本更改为1.0.0以及添加-ktx其他答案中提到的依赖项,一切都应该正常工作。

于 2019-04-07T06:49:54.380 回答