我正在使用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 Project
和Rebuild Project
。
这是抛出:
Too many arguments for @NonNull public open fun actionGameFragmentToGameWonFragment(): GameFragmentDirections.ActionGameFragmentToGameWonFragment defined in com.example.android.navigation.GameFragmentDirections
答案 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 导航。每个选项卡都有自己的图表。在一张图中所需的目的地不存在,导致问题的原因是什么。我通过复制目的地解决了这个问题