Android kotlin: putParcelableArrayList (ArrayList & lt; int & gt;) и getParcelableArrayList & lt; Int & gt; () не работают

Я хотел сопоставить конкретный блок if в java

   ...
   ...
   if(isTrue){
       doAction();

   }
...
...
}

. Если я использую regExp

if \(isTrue(.|\n)*}

, он включал замыкающую скобку для блока метода, поэтому я использовал

if \(!isTrue([^}.]|\n)*}

, чтобы исключить заключительную скобку из соответствия шаблону.

1
задан Mohamd Al-Najjar 13 July 2018 в 19:25
поделиться

2 ответа

Использовать

  • putIntegerArrayList (String key, ArrayList value)
  • Вставляет значение ArrayList в отображение этого Bundle, заменяя любое существующее значение для данного key
putIntegerArrayList(Constant.BRANDS_LIST, array)

И получится как

  • getIntegerArrayList (String key)
  • Возвращает значение связанный с данным ключом, или null, если сопоставление нужного типа для данного ключа или нулевого значения явно не связано с ключом.
extras.getIntegerArrayList(Constant.BRANDS_LIST)
1
ответ дан Abner Escócio 17 August 2018 в 12:12
поделиться
  • 1
    extras.getIntArray(Constant.BRANDS_LIST), возможно, будет работать, но в Bundle нет putExtra(Constant.BRANDS_LIST, array) – Mohamd Al-Najjar 13 July 2018 в 19:36
  • 2
    Мой ответ обновлен – Abner Escócio 13 July 2018 в 19:45

Вы можете создать общий класс Parcelable, который содержит переменную типа (Any)

class BaseParcelable : Parcelable {

var value: Any

constructor(value: Any) {
    this.value = value
}

constructor(parcel: Parcel) {
    this.value = Any()
}

override fun writeToParcel(dest: Parcel?, flags: Int) {}

override fun describeContents(): Int = 0

companion object CREATOR : Parcelable.Creator<BaseParcelable> {

    override fun createFromParcel(parcel: Parcel): BaseParcelable {
        return BaseParcelable(parcel)
    }

    override fun newArray(size: Int): Array<BaseParcelable?> {
        return arrayOfNulls(size)
    }
}

}

Затем используйте этот класс для передачи данных между фрагментами или между ними (Activty to fragment)

Чтобы передать список из фрагмента в фрагмент, например:

companion object {
fun newInstance(categoryId: Int, brandsList: ArrayList<Int>): Fragment {
    val fragment = CategoryAllAdsFragment()
    fragment.arguments = Bundle()
    fragment.arguments!!.putInt(Constant.CATEGORY_ID, categoryId)
    fragment.arguments!!.putParcelable(Constant.BRANDS_LIST, BaseParcelable(brandsList))
    return fragment
}

}

Чтобы получить список:

val any = arguments?.getParcelable<BaseParcelable>(Constant.BRANDS_LIST).value
val list = any as ArrayList<Int>
1
ответ дан Montasser.Al-Aqrbawi 17 August 2018 в 12:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: