如何使用putParcelableArrayList的通用列表?

问题描述 投票:0回答:2

使用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))

制作列表的另一个副本。

如何将通用列表设置为Bundle?

android kotlin bundle
2个回答
1
投票

在大多数情况下(但并非总是)List实例实际上是ArrayLists。所以你可以避免大多数副本:

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

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

Bundle不会改变你放入它的列表,所以这应该是足够安全的,假设你把它放入捆绑后不要改变它。


3
投票

如何将通用列表设置为Bundle?

你没有。 Bundle仅限于某些类型,而List不是其中之一。

© www.soinside.com 2019 - 2024. All rights reserved.