【问题标题】:How to pass a List as an argument to a Fragment using Navigation Component safeargs如何使用导航组件安全参数将列表作为参数传递给片段
【发布时间】:2018-11-29 18:25:09
【问题描述】:

documentation 讨论了如何发送简单的整数和字符串。例如:

<argument
    android:name="myIntArg"
    android:defaultValue="255"
    app:argType="integer" />

在源片段中:

val action = OriginFragmentDirections.myAction(myInt)
findNavController().navigate(action)

在目标片段中:

val receivedInt = DestinationFragmentArgs.fromBundle(arguments).myIntArg

但是我想发送一个整数列表(myIntListArg)而不是myIntArg。我该怎么做?我会在论证中使用什么 app:argType?

【问题讨论】:

  • 支持 alpha8 中的对象列表:issuetracker.google.com/issues/111487504
  • 我们现在实际上应该做什么来将字符串列表发送到另一个片段并使用这个组件:/
  • 我不会通过意图将对象列表传递给片段; Intent 的大小是有限的(1mb?,现在不记得了)。我会传递一个 ID 或可以允许片段检索相应数据的东西。如果你真的想在不重构的情况下传递这个 now ,你可以将你的整数列表转换为逗号分隔的字符串,然后在另一边解码(为什么?),然后你只需传递一个 "字符串”通过意图。我不会这样做,但只要字符串小于最大意图大小,它就可以正常工作。
  • 对未来读者的免责声明:如果您的列表保证始终是“短”的,那么 - 当他们为此添加支持时 - 如果您传递少量整数,我不会认为它不好在一个数组中,但你必须确保你不会以非预期的方式滥用该机制,这就是我在这里想说的。 :)

标签: android android-jetpack android-architecture-navigation


【解决方案1】:

您可以像这样添加数组参数:

<argument
        android:name="variableName"
        app:argType="className[]"/>

请注意,“className”必须像“com.google.package.ClassName”一样设置。

【讨论】:

    【解决方案2】:

    这是传递整数列表的方法。

        <argument
            android:name="yourVariableName"
            app:argType="integer[]"
            app:nullable="false"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-02
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多