#android #kotlin #bundle
#Android #kotlin #пакет
Вопрос:
При использовании kotlin и наличии функции создается общий список, а внутри lis он помещается в пакет для передачи фрагменту.
fun createArgs(filters: List<Filters>?): Bundle {
val args = Bundle()
args.putParcelableArrayList(KEY_FILTERS, filters) //<=== does not compile
должен измениться на
args.putParcelableArrayList(KEY_FILTERS, ArrayList(filters))
который создает другую копию списка.
Как установить общий список в Bundle?
Ответ №1:
Как установить общий список в Bundle?
Вы этого не делаете. Bundle
ограничивается только определенными типами и List
не является одним из них.
Комментарии:
1. спасибо @ CommonsWare, значит, нельзя использовать общий список или нужно сделать копию (то есть в нашем случае функция является производной от третьей стороны и не может перейти на передачу в ArrayList<>)? Просто не хочу копировать его снова, хм.
Ответ №2:
В большинстве случаев (но не всегда) List
экземпляры на самом деле являются ArrayList
s. Таким образом, вы можете избежать большинства копий:
fun <T> List<T>.asArrayList(): ArrayList<T> = if (this is ArrayList) this else ArrayList(this)
args.putParcelableArrayList(KEY_FILTERS, filters.asArrayList())
Пакет не изменит список, который вы в него поместили, так что это должно быть достаточно безопасно, предполагая, что вы также не измените его после помещения в пакет.