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 Project
和 Rebuild 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>
我在 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
此问题已通过删除 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>