我无法设置安全参数的默认值



我有一个String类型的arg从NewCodeFragment发送到MainFragment

如果我设置了一个默认值,那么我会得到一个"参数太多"的错误。

如何设置默认值?我的理解是,如果我发送一个arg,那么目标片段将接收该arg,否则它将接收默认值。错误的

问题代码:

navigationXML:

<argument
android:name="aArg"
app:argType="string"
app:nullable="true"
android:defaultValue="@null" />

fragment.class:

val aArg="abc"      
// build error, it says too many args    
this.findNavController().navigate(NewCodeFragmentDirections.actionNewCodeFragmentToMainFragment(aArg))

无问题代码:

navigationXML:

<argument
android:name="aArg"
app:argType="string"
app:nullable="true"/>     // remove android:defaultValue="@null"

fragment.class:

val aArg="abc"      
this.findNavController().navigate(NewCodeFragmentDirections.actionNewCodeFragmentToMainFragment(aArg))

另一个没有问题的代码:

navigationXML:

<argument
android:name="aArg"
app:argType="string"
app:nullable="true"
android:defaultValue="@null" />

fragment.class:

val aArg="abc"      
this.findNavController().navigate(NewCodeFragmentDirections.actionNewCodeFragmentToMainFragment())   // remove aArg

如果您的fragment参数有默认值,则生成的构建器方法将不会为其提供参数。您需要在xDirections对象上单独设置该fragment的参数值。应该有一个方法来设置每个参数。为了让你的例子发挥作用,你需要做一些事情,比如如果使用Java:

String aArg = "abc";
NewCodeFragmentDirections.ActionNewCodeFragmentToMainFragment direction = 
NewCodeFragmentDirections.actionNewCodeFragmentToMainFragment().aArg(aArg);
this.findNavController().navigate(direction)

在Kotlin,这可能看起来像:

this.findNavController().navigate(
NewCodeFragmentDirections.actionNewCodeFragmentToMainFragment().apply {
aArg = "abc"
})

我喜欢最后一种方法。此处的参数可以具有默认值。如果您有一个标准值,而不是在参数中传递它,我的建议是将它保留在将接收参数的目标片段中。因此,您不必到处添加相同的默认字符串。如果args中的defaultValuenull,则可以使用该片段上的值。

<argument
android:name="aArg"
app:argType="string"
app:nullable="true"
android:defaultValue="@null" />

例如,3个片段A、B和C将使用args进行片段X。A通过"abc",B和C通过null。现在,当从参数读取时,您可以在片段X中获得条件

val aArgument = safeArgs.aArg?.let {
// Use it
it
} else {
// Use the default String
"This is your default string"
}

必须有一个生成的方法来设置值。关于作者的例子必须是这样的:

val aArg="abc"
val action = NewCodeFragmentDirections.actionNewCodeFragmentToMainFragment.setAArg(aArg)
findNavController().navigate(action)

相关内容

  • 没有找到相关文章

最新更新