如何对putParcelableArrayList使用通用列表?

时间:2019-03-22 12:32:24

标签: android kotlin bundle

使用kotlin并具有一个函数,它会使用一个通用列表,然后将lis放入Bundle中以传递给片段。

fun createArgs(filters: List<Filters>?): Bundle {
    val args = Bundle()
    args.putParcelableArrayList(KEY_FILTERS, filters)  //<=== does not compile

必须更改为

args.putParcelableArrayList(KEY_FILTERS, ArrayList(filters))

复制列表的另一个副本。

如何将通用列表设置为捆绑商品?

2 个答案:

答案 0 :(得分:3)

  

如何将通用列表设置为捆绑商品?

你不知道。 Bundle仅限于某些类型,List不是其中一种。

答案 1 :(得分:1)

在大多数情况下(但并非总是如此),List个实例实际上是ArrayList个。因此,您可以避免大多数副本:

fun <T> List<T>.asArrayList(): ArrayList<T> = if (this is ArrayList) this else ArrayList(this)

args.putParcelableArrayList(KEY_FILTERS, filters.asArrayList())

捆绑包不会更改您放入列表中的列表,因此假设将其放入捆绑包后也不会对其进行突变,这应该足够安全。