androidx导航:@NonNull公共打开乐趣的参数过多

时间:2019-07-14 16:13:48

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

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

5 个答案:

答案 0 :(得分:5)

此问题在此处的类似帖子-https://stackoverflow.com/a/60807951/11615237

中得到了回答

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

答案 1 :(得分:2)

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

例如,这个:

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

而不是这个:

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

答案 2 :(得分:0)

此问题已通过删除 os:cmd/1标签来解决。

所以-

android:defaultValue

进行更改后,再<argument android:name="numQuestions" app:argType="integer"/> <argument android:name="numCorrect" app:argType="integer"/>

答案 3 :(得分:0)

  

“太多用于公共娱乐的参数View.findNavController():   在androidx.navigation“

中定义的NavController

我遇到了同样的错误。

已确认的答案不能解决我的问题。

我的解决方案

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

注意

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

样本

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

请注意,正确的片段正在起作用。

谢谢。

答案 4 :(得分:0)

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