Как использовать общий список для putParcelableArrayList?

#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())
  

Пакет не изменит список, который вы в него поместили, так что это должно быть достаточно безопасно, предполагая, что вы также не измените его после помещения в пакет.