Android kotlin:putParcelableArrayList(ArrayList<int>)和getParcelableArrayList<Int>()不能工作。

5 人关注

我试图将 ArrayList<Integer> 从片段传递到另一个片段,以下是我的代码。

Kotlin code

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!!.putParcelableArrayList(Constant.BRANDS_LIST, brandsList)
        return fragment
  

类型不匹配。

Required: java.util.ArrayList !

找到:kotlin.collections.ArrayList /* = java.util.ArrayList */

我试图阅读时也是如此。

Kotlin code

try {
    val brandsList = arguments!!.getParcelableArrayList<Int>(Constant.BRANDS_LIST)
} catch (ex: Exception) {
    throw Exception("brand list cannot be null")
  

类型参数不在其范围内

预期的。可包邮!

Found: Int

我已经用Java测试过了,它的工作很好。

android
arraylist
kotlin
parcelable
Mohamd Ali
Mohamd Ali
发布于 2018-07-14
2 个回答
Montaser Sobaih
Montaser Sobaih
发布于 2018-07-14
已采纳
0 人赞同

你可以做一个一般的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到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

To get the list:

val any = arguments?.getParcelable<BaseParcelable>(Constant.BRANDS_LIST).value
val list = any as ArrayList<Int>
    
原因是:java.lang.ClassCastException: java.lang.Object不能被投到java.util.ArrayList中。
Abner Escócio
Abner Escócio
发布于 2018-07-14
0 人赞同
  • putIntegerArrayList(String key, ArrayList value)。

  • 将一个ArrayList值插入到这个Bundle的映射中,替换掉任何 现有的键的值

  • putIntegerArrayList(Constant.BRANDS_LIST, array)
      
  • getIntegerArrayList(String key)

  • 返回与给定键相关的值,如果不存在所需类型的映射,则返回空值。 所需类型的映射,则返回空值。 明确地与该键相关联。

  •