Как инициализировать массив <List <Model>> в Kotlin? - PullRequest
0 голосов
/ 11 мая 2018

У меня есть строка JSON, которая поступает из остальных API, и я связываю ее с List<CategoryDO> объектом. У меня есть все данные категории / подкатегории в этот объект списка List<CategoryDO>, но я не знаю, как отделить подкатегории от этих данных в формате Array<List<CategoryDO>>.

Как добавить список подкатегорий в Array<List<CategoryDO>> объект? Как я могу объявить и инициализировать Array<List<CategoryDO>> в Kotlin?

Все категории должны быть в формате List<CategoryDO>, а все подкатегории - в формате Array<List<CategoryDO>>.

Например:

List<CategoryDO of Cat-1, CategoryDO of cat-2, ... etc>

Array<List<CategoryDO of SubCat-1 of Cat-1, CategoryDO of SubCat-2 of Cat-1>>, List<CategoryDO of SubCat-12 of Cat-2, CategoryDO of SubCat-22 of Cat-2>>, ...etc>>

Класс данных CategoryDO:

data class CategoryDO(  @SerializedName("Id")
                    @Expose
                    var id: Long? = null,
                    @SerializedName("Name")
                    @Expose
                    var name: String? = null,
                    @SerializedName("SubCategories")
                    @Expose
                    var subCategories: List<CategoryDO>? = null)

На самом деле, мне нужно передать эту отдельную категорию / подкатегорию классу CategoryAdapter.

CategoryAdapter образец класса:

class CategoryAdapter : BaseExpandableListAdapter {
private var groupItem: List<CategoryDO>
private var contentItem: Array<List<CategoryDO>>
private var context: Context
private var imageOnClickListener: View.OnClickListener

constructor(context: Context, groupItem: List<CategoryDO>, contentItem: Array<List<CategoryDO>>, imageOnClickListener: View.OnClickListener) {
        this.groupItem = groupItem
        this.contentItem = contentItem
        this.context = context
        this.imageOnClickListener = imageOnClickListener
    }
  .
  .
  .
}

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Если вам нужно преобразовать List<CategoryDO> в Array<List<CategoryDO>>, где внутренний список - это список подкатегорий из каждого CategoryDO, вы можете отобразить исходный список и преобразовать результаты в массив ...

// Given
val categories: List<CategoryDO> = TODO()

val allSubCats: Array<List<CategoryDO>> = 
    categories.map { it. subCategories }.toTypedArray()
0 голосов
/ 11 мая 2018

Я пробую данные json в адаптере представления переработчика, и он работает, вы можете попробовать, если решили вашу проблему.

class HeroAdapter(val item: MutableList<Hero>, val context: Context, val itemClick:OnRecyclerViewItemClickListener) : RecyclerView.Adapter<HeroAdapter.ItemViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ItemViewHolder {
    val v = LayoutInflater.from(parent?.context).inflate(R.layout.adapter_layout, parent, false)
    return ItemViewHolder(v)

}

var onClickListener: OnRecyclerViewItemClickListener? = null

open interface OnRecyclerViewItemClickListener {
    fun click(hero: Hero)
}

override fun onBindViewHolder(holder: ItemViewHolder?, position: Int) {
    var hero: Hero = item[position]
    onClickListener=itemClick
    holder?.mTvName?.text = hero.getName()
    holder?.mTvBio?.text = hero.getBio()
    holder?.mTvReal?.text = hero.getRealname()
    holder?.mTvFirst?.text = hero.getFirstappearance()
    holder?.mTvTeam?.text = hero.getTeam()
    holder?.mTvPublisher?.text = hero.getPublisher()
    holder?.mTvCreate?.text = hero.getCreatedby()
    Glide.with(context)
            .load(hero.getImageurl())
            .into(holder?.mIvImage)
    holder?.itemView?.setOnClickListener(View.OnClickListener {
        this.onClickListener?.click(hero)
    })
}

override fun getItemCount(): Int {
    return item.size
}

class ItemViewHolder : RecyclerView.ViewHolder {
    var mTvName: TextView? = null
    var mTvReal: TextView? = null
    var mTvCreate: TextView? = null
    var mTvBio: TextView? = null
    var mTvTeam: TextView? = null
    var mTvPublisher: TextView? = null
    var mTvFirst: TextView? = null
    var mIvImage: ImageView? = null

    constructor(itemView: View) : super(itemView) {
        mTvName = itemView.findViewById(R.id.alTvName)
        mTvReal = itemView.findViewById(R.id.alTvRealName)
        mTvFirst = itemView.findViewById(R.id.alTvFirst)
        mTvCreate = itemView.findViewById(R.id.alTvcreatedby)
        mTvBio = itemView.findViewById(R.id.alTvBio)
        mTvTeam = itemView.findViewById(R.id.alTvTeam)
        mTvPublisher = itemView.findViewById(R.id.alTvpublisher)
        mIvImage = itemView.findViewById(R.id.alIvUserImage)
    }
}

}

...