繁体   English   中英

水平 RecyclerView 作为 Groupie 适配器中的项目不起作用

[英]Horizontal RecyclerView as an Item in Groupie Adapter does not work

我正在使用 Groupie Adapter 将我的数据填充到 RecylerView,其中包含不同类型的项目并使用可扩展的组和部分,其中一个项目是 Horizo​​ntal RecyclerView - 一切正常,除了 ** 我无法将子 Horizo​​ntal RecyclerView 滚动到查看它的项目。**


    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

PiHorizo​​ntalListItem 包含一个 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)
        }
    }
}

任何人都可以帮我解决这个问题,或者是否有解决方法?

我找到了解决方案,我用一个 Group 包裹了我的 PiHorizo​​ntalListItem 然后将它添加到适配器,现在它工作正常。 谢谢

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)
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM