【问题标题】:Unresolved reference: NavArgs after added some arguments to destination未解决的参考:向目的地添加了一些参数后的 NavArgs
【发布时间】:2019-06-18 14:59:41
【问题描述】:

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

【问题讨论】:

    标签: android navigation android-architecture-components android-safe-args


    【解决方案1】:

    根据该页面上的文档:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        即在项目的 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 不会在插入依赖项时告诉您库有更新。

        【讨论】:

          【解决方案4】:

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

          转到菜单:Build >> Clean Project

          【讨论】:

          • 我也有上面提到的所有解决方案,认为这解决了我的问题。
          【解决方案5】:

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

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

          【讨论】:

            【解决方案6】:

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

             app:argType="string"
            

            【讨论】:

            • 是 OP 的问题吗?
            • @IgorGanapolsky 不,但对其他人来说可能是个问题
            【解决方案7】:

            在我的情况下,我需要在我的 build.gradle (app) 中添加它

            kotlinOptions {
                jvmTarget = '1.8'
            }
            

            【讨论】:

              【解决方案8】:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-04-28
                • 1970-01-01
                • 2021-08-17
                • 2016-12-14
                • 2020-05-27
                • 2019-11-16
                相关资源
                最近更新 更多