Как реализовать HeaderItems в Recyclerview, используя Group ie in Android - PullRequest
1 голос
/ 07 апреля 2020

Я пытаюсь использовать Группу ie для создания повторного просмотра с HeaderItems. У меня есть группа данных, подобная этой

class Group(
    val id: String = generateId(),
    val name: String? = null,
    val entries: List<Entry>? = null
) : Item(), Parcelable {
    override fun bind(viewHolder: GroupieViewHolder, position: Int) {
        viewHolder.apply {
            itemView.tvGroupName.text = name
        }
    }

    override fun getLayout() = R.layout.group_single_item

    constructor(source: Parcel) : this(
        source.readString(),
        source.readString(),
        source.createTypedArrayList(Entry.CREATOR)
    )


    override fun describeContents() = 0

    override fun writeToParcel(dest: Parcel, flags: Int) = with(dest) {
        writeString(id)
        writeString(name)
        writeTypedList(entries)
    }

    companion object {
        private fun generateId(): String {
            return UUID.randomUUID().toString()
        }

        @JvmField
        val CREATOR: Parcelable.Creator<Group> = object : Parcelable.Creator<Group> {
            override fun createFromParcel(source: Parcel): Group = Group(source)
            override fun newArray(size: Int): Array<Group?> = arrayOfNulls(size)
        }
    }


}

У каждой группы есть список записей

data class Entry(val id: Long=0, val name: String) : Parcelable {
    constructor(parcel: Parcel) : this(
        parcel.readLong(),
        parcel.readString()
    ) {
    }

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeLong(id)
        parcel.writeString(name)
    }

    override fun describeContents(): Int {
        return 0
    }

    companion object CREATOR : Parcelable.Creator<Entry> {
        override fun createFromParcel(parcel: Parcel): Entry {
            return Entry(parcel)
        }

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

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

Это то, что я пытался

val linearLayoutManager = LinearLayoutManager(this, RecyclerView.VERTICAL, false)
        val groups = intent.getParcelableArrayListExtra<Group>("groups")


        val groupAdapter = GroupAdapter<GroupieViewHolder>().apply {

            val section = Section(Group())
            section.setHeader(Group())
            section.addAll(groups)
            this.add(section)

        }


        recyclerViewGroups.apply {
            layoutManager = linearLayoutManager
            adapter = groupAdapter
        }

Но я не совсем уверен, как добавить группу вместе с ее Записи. Любая помощь будет оценена. Спасибо

1 Ответ

0 голосов
/ 07 апреля 2020

Сначала вам нужно создать item классы для ваших групп (возможно header и entry).

Следуйте инструкциям в этом разделе .

Например, это могут быть:

class HeaderItem(private val groupName: String) : Item() {

    //... to be implemented
}

и

class EntryItem(private val entryName: String) : Item() {

    //... to be implemented
}

, а затем использовать их в вашем адаптере (необходимо проверить, я пишу это на макушке):

val groupAdapter = GroupAdapter<GroupieViewHolder>().apply {
    groups.forEach { group ->
        val section = Section()
        section.setHeader(HeaderItem(group.name))
        section.addAll(group.entries.map{ it -> EntryItem(it.name) })
        this.add(section)
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...