首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android kotlin: putParcelableArrayList(ArrayList<int>)和getParcelableArrayList<Int>()不能工作

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

Stack Overflow用户
提问于 2018-07-14 03:25:43
回答 2查看 7.2K关注 0票数 4

我正在尝试将ArrayList<Integer>从一个片段传递到另一个片段,以下是我的代码:

Kotlin代码

代码语言:javascript
复制
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
    }
}

但上面写着:

类型不匹配。

必需: java.util.ArrayList!

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

我试着读的时候也是这样。

Kotlin代码

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

上面写着:

类型参数不在其范围内

预期: Parcelable!

已找到: Int

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-14 03:31:55

使用

  • putIntegerArrayList(String密钥,ArrayList值)
  • 将ArrayList值插入到此捆绑包的映射中,替换给定密钥

的任何现有值

代码语言:javascript
复制
putIntegerArrayList(Constant.BRANDS_LIST, array)

然后变得像

  • getIntegerArrayList(String键)
  • 返回与给定键关联的值,如果给定键不存在所需类型的映射或NULL值与该键显式关联,则返回null。

代码语言:javascript
复制
extras.getIntegerArrayList(Constant.BRANDS_LIST)
票数 4
EN

Stack Overflow用户

发布于 2018-07-14 03:41:22

您可以创建一个包含类型为(Any)的变量的通用Parcelable类。

代码语言:javascript
复制
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到片段)

要将列表从一个片段传递到另一个片段,例如:

代码语言:javascript
复制
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
    }
}

要获取列表,请执行以下操作:

代码语言:javascript
复制
val any = arguments?.getParcelable<BaseParcelable>(Constant.BRANDS_LIST).value
val list = any as ArrayList<Int>
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51331659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档