androidx 导航:@NonNull 的参数太多 public 打开乐趣

androidx Navigation: Too many arguments for @NonNull public open fun

我在 Android Studio 中使用导航编辑器来实现 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:defaultValue 标签得到解决。

所以-

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

修改后Rebuild Project

" Too many arguments for public fun View.findNavController(): NavController defined in androidx.navigation "

我遇到了同样的错误。

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

我的解决方案

文件 -> 无效 Caches/Restart

关注

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

样本

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

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

谢谢。

这已在类似的 post 此处得到回答 -

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

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

所以,例如,这个:

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

而不是这个:

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

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

我遇到了同样的问题。我通过将参数放入操作标记中来修复它。

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