0

I am populating my data to the RecylerView using Groupie Adapter with different types of items and using expandable groups and sections, one of the items is a Horizontal RecyclerView - everything works fine except that ** I am not able to scroll the child Horizontal RecyclerView to see its items.**


    var uiList = mutableListOf<Group>()
    private val adapter = GroupAdapter<GroupieViewHolder>()
    ......
    val horizontalListItem = PiHorizontalListItem(
        mediaIdCounter++,
        horizontalAdapter,
        nestedSharedViewPool

    )

    expandableGroup.add(
        horizontalListItem
    )
    .....
    uiList.plusAssign(expandableGroup)

    adapter.addAll(uiList)
    mainRecyclerView.adapter = adapter

where the PiHorizontalListItem contains a RecyclerView

class PiHorizontalListItem(
    private val id: Long,
    private val carouselAdapter: GroupAdapter<GroupieViewHolder>,
    private val sharedPool: RecyclerView.RecycledViewPool
) :Item() {

    override fun getId(): Long = id

    override fun getLayout(): Int = R.layout.item_horizontal_rv

    override fun bind(viewHolder: GroupieViewHolder, position: Int) {
        viewHolder.containerView.rv.apply {

            setRecycledViewPool(sharedPool)
            (layoutManager as LinearLayoutManager).orientation = LinearLayoutManager.HORIZONTAL
            (layoutManager as LinearLayoutManager).recycleChildrenOnDetach = true
            adapter = carouselAdapter
            setHasFixedSize(true)
        }
    }
}

Can anybody help me fix this issue or if there is a workaround for it?

1 Answers1

0

I found the solution I wrapped my PiHorizontalListItem with a Group then add it to the adapter and now it is working fine. Thanks

var uiList = mutableListOf<Group>()
private val adapter = GroupAdapter<GroupieViewHolder>()
.......
val carousel = CarouselGroup(mediaIdCounter++,horizontalAdapter,nestedSharedViewPool)
carouselSection.add(carousel)
expandableGroup.add(carouselSection) 
.....
uiList.plusAssign(expandableGroup)
    
adapter.addAll(uiList)
mainRecyclerView.adapter = adapter

and here how the carousel looks like and how to handles the listview

class CarouselGroup(id:Long, madapter: GroupAdapter<GroupieViewHolder>,  nestedSharedViewPool : RecyclerView.RecycledViewPool,) :
    Group {
    private var isEmpty = true
    private val sharedPool = nestedSharedViewPool
    private val adapter = madapter
    private var groupDataObserver: GroupDataObserver? = null
    private var carouselItem = PiHorizontalListItem(id, adapter,sharedPool)

    private val adapterDataObserver: AdapterDataObserver = object : AdapterDataObserver() {

        override fun onItemRangeRemoved(positionStart: Int, itemCount: Int) {
            val empty = adapter.itemCount == 0
            if (empty && !isEmpty) {
                isEmpty = empty
                groupDataObserver!!.onItemRemoved(carouselItem, 0)
            }
        }

        override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
            val empty = adapter.itemCount == 0
            if (isEmpty && !empty) {
                isEmpty = empty
                groupDataObserver!!.onItemInserted(carouselItem, 0)
            }
        }
    }

    override fun getItemCount(): Int {
        return if (isEmpty) 0 else 1
    }

    override fun getItem(position: Int): Item<*> {
        return if (position == 0 && !isEmpty) carouselItem else throw IndexOutOfBoundsException()
    }

    override fun getPosition(item: Item<*>): Int {
        return if (item === carouselItem && !isEmpty) 0 else -1
    }

    override fun registerGroupDataObserver(groupDataObserver: GroupDataObserver) {
        this.groupDataObserver = groupDataObserver
    }

    override fun unregisterGroupDataObserver(groupDataObserver: GroupDataObserver) {
        this.groupDataObserver = null
    }

    init {
        carouselItem = PiHorizontalListItem(id, adapter,sharedPool)
        isEmpty = adapter.itemCount == 0
        adapter.registerAdapterDataObserver(adapterDataObserver)
    }
}
  • Your answer could be improved with additional supporting information. Please [edit] to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Jan 17 '22 at 08:47