【问题标题】:androidx Navigation: Too many arguments for @NonNull public open funandroidx 导航:@NonNull 公共开放乐趣的参数太多
【发布时间】:2019-11-23 12:38:41
【问题描述】:

我在 Android Studio 中使用 Navigation Editor 来实现 Safe Args

我接受一个片段中的参数作为

 <fragment
    android:id="@+id/gameWonFragment"
    android:name="com.example.android.navigation.GameWonFragment"
    android:label="@string/android_trivia"
    tools:layout="@layout/fragment_game_won">

    <action
        android:id="@+id/action_gameWonFragment_to_gameFragment"
        app:destination="@id/gameFragment"
        app:popUpTo="@+id/titleFragment">
    </action>
    <argument
        android:name="numQuestions"
        app:argType="integer"
        android:defaultValue="0" />
    <argument
        android:name="numCorrect"
        app:argType="integer"
        android:defaultValue="0" />
 </fragment>

在我的片段中,我将参数发送为

view.findNavController().navigate(GameFragmentDirections.actionGameFragmentToGameWonFragment(numQuestions, questionIndex))

但是,GameFragmentDirections.actionGameFragmentToGameWonFragment() 不想接受参数。我试过Clean ProjectRebuild Project

这是投掷:

Too many arguments for @NonNull public open fun actionGameFragmentToGameWonFragment(): GameFragmentDirections.ActionGameFragmentToGameWonFragment defined in com.example.android.navigation.GameFragmentDirections

【问题讨论】:

  • 我也遇到了同样的问题。但我需要为我的片段设置一个默认值。有没有默认值的解决方案?
  • 嗨吉姆,有什么解决方案吗?

标签: android android-studio androidx android-jetpack android-jetpack-navigation


【解决方案1】:

此问题已通过删除android:defaultValue 标记得到解决。

所以-

<argument
    android:name="numQuestions"
    app:argType="integer"/>
<argument
    android:name="numCorrect"
    app:argType="integer"/>

修改后Rebuild Project

【讨论】:

    【解决方案2】:

    " public fun View.findNavController() 的参数太多: androidx.navigation中定义的NavController"

    我遇到了同样的错误。

    确认的答案并没有解决我的问题。

    我的解决方案

    文件 -> 使缓存无效/重新启动

    注意

    请注意,正确的参数会传递给正确的片段。

    示例

    view.findNavController()
          .navigate(GameFragmentDirections
                .actionGameFragmentToGameWonFragment(numQuestions, questionIndex))
    

    请注意,正确的片段正在运行。

    谢谢。

    【讨论】:

    • 这个解决方案对我有用。在 gradle 文件中添加插件时,android studio 无法识别它们已更新。手动同步和构建项目为我解决了这个问题。谢谢老哥
    【解决方案3】:

    这在此处的类似帖子中得到了回答 - https://stackoverflow.com/a/60807951/11615237

    基本上,您可能需要像 apply plugin: "androidx.navigation.safeargs.kotlin" 这样使用 Kotlin 版本的插件。

    【讨论】:

    • 它的工作就像魅力一样,我认为安全参数被破坏了!
    【解决方案4】:

    我也遇到过这个问题。我能够保留android:defaultValue 参数标记并通过获取适当操作对象的实例、设置必要的值,然后将其发送到导航命令来清除“参数过多”错误。

    例如,这个:

    val actionDetail = GameFragmentDirections.actionGameFragmentToGameWonFragment()
    actionDetail.numQuestions = numQuestions
    actionDetail.numCorrect = questionIndex
    view.findNavController().navigate(actionDetail)
    

    而不是这样:

    view.findNavController().navigate(GameFragmentDirections.actionGameFragmentToGameWonFragment(numQuestions, questionIndex))
    

    【讨论】:

    • 如果您想为参数设置 defaultValue,这是正确的解决方案。
    【解决方案5】:

    我也遇到过同样的问题。我正在使用多后台导航。每个选项卡都有自己的图表。在一张图中需要的目的地不存在,是什么导致了问题。我通过复制目的地解决了这个问题

    【讨论】:

    • 是的,它也适用于我,但是,它往往会在其他选项卡导航图中出现不需要的代码您是否找到任何其他方法?
    猜你喜欢
    • 2020-12-14
    • 2020-04-30
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 2017-02-08
    相关资源
    最近更新 更多