Android Studio androidx导航:@NonNull public open fun的参数太多

a0x5cqrl  于 2023-02-24  发布在  Android
关注(0)|答案(6)|浏览(161)

我正在使用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
q5iwbnjs

q5iwbnjs1#

通过删除android:defaultValue标记修复了此问题。
所以-

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

然后在进行更改后使用Rebuild Project

mefy6pfw

mefy6pfw2#

这个问题在类似的帖子中得到了回答-https://stackoverflow.com/a/60807951/11615237
基本上,您可能需要使用Kotlin版本的插件,如apply plugin: "androidx.navigation.safeargs.kotlin"

pengsaosao

pengsaosao3#

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

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

而不是这个

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

nnt7mjpx4#

"公共函数View. findNavController()的参数太多:在androidx. navigation中定义的导航控制器"
我遇到了同样的错误。
确定的答案没有解决我的问题。

我的解决方案

文件-〉使缓存无效/重新启动
注意
注意,正确的参数被传递给正确的片段。
样品

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

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

f4t66c6m

f4t66c6m5#

我也遇到过同样的问题,我通过在action标签中添加参数来解决它。

<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>
hgb9j2n6

hgb9j2n66#

我也遇到过同样的问题。我使用的是多栈导航。每个标签页都有自己的图表。在一个图表中缺少所需的目的地,这是导致问题的原因。我通过复制目的地解决了这个问题

相关问题