9

我在 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
4

5 回答 5

25

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

所以 -

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

然后Rebuild Project在进行更改后。

于 2019-07-15T06:20:47.723 回答
11

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

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

于 2020-03-30T23:28:41.420 回答
8

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

因此,例如,这个:

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

而不是这个:

view.findNavController().navigate(GameFragmentDirections.actionGameFragmentToGameWonFragment(numQuestions, questionIndex))
于 2020-09-20T20:28:31.993 回答
3

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

我遇到了同样的错误。

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

我的解决方案

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

注意力

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

样本

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

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

谢谢。

于 2019-11-07T12:22:07.027 回答
0

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

于 2021-06-20T09:33:37.107 回答