是否可以在android的新导航组件中发送除字符串或整数之外的参数

Mic*_*ato 6 android kotlin android-navigation android-architecture-components android-jetpack

新的导航组件非常棒!但是我想在我的片段之间发送"长"变量.

在导航图文件中写这个:

<argument
        android:name="discussionId"
        app:type="string" />
Run Code Online (Sandbox Code Playgroud)

写这个不会编译:

<argument
        android:name="discussionId"
        app:type="long" />
Run Code Online (Sandbox Code Playgroud)

目前,似乎我不得不将它们解析为字符串格式.它工作正常,但对我来说似乎很奇怪,我不能使用诸如long或byte或short这样的基本架构之类的原始类型.我错过了什么吗?这种功能是否会在未来开发?

GV_*_*Qst 8

使用原始包装器!它出什么问题了?

<argument
    android:name="discussionId"
    app:argType="java.lang.Long" />

// java.lang.Double, java.lang.Float, etc...
Run Code Online (Sandbox Code Playgroud)

与 kotlin 一起工作,甚至与安全参数一起工作,因为所有原始包装器都在实现Serializable


Gui*_*ume 7

从1.0.0-alpha08版本开始,您可以使用很多不同的类型,我在这里找到了一个列表

"integer" -> IntType
"integer[]" -> IntArrayType
"long" -> LongType
"long[]" -> LongArrayType
"float" -> FloatType
"float[]" -> FloatArrayType
"boolean" -> BoolType
"boolean[]" -> BoolArrayType
"reference" -> ReferenceType
"reference[]" -> ReferenceArrayType
"string" -> StringType
"string[]" -> StringArrayType
null -> StringType
Run Code Online (Sandbox Code Playgroud)

和用于导航图(例如:字符串列表)

<argument
    android:name="photo_url"
    app:argType="string[]"
/>
Run Code Online (Sandbox Code Playgroud)

  • 双倍呢? (4认同)

Lev*_*ira 5

目前,您不能使用除整数,字符串,推断引用之外的类型的安全args .一个问题已经开通要求其他类型.

但是,在使用navigate()方法导航到目标时,以编程方式传递:

var bundle = bundleOf("key" to amount)
view.findNavController().navigate(R.id.action_id, bundle)
Run Code Online (Sandbox Code Playgroud)

您可以使用常规getArguments方法检索目标片段中的数据:

val value = arguments.getString("key")
Run Code Online (Sandbox Code Playgroud)