Android Kotlin:Groupie Recycler查看添加到同一可扩展项目中的所有项目

问题描述

首先,我的问题与this相同。但是我的代码不同,因此我尝试遵循this,但不能解决我的问题。

所以我的问题是,我想要这个:

我有这个:

这是我的ParentItemAdapter

代码
class ParentItemAdapter(private val titlePlan: String?,private val fragment: FragmentActivity) :
    Item(),ExpandableItem {
    private lateinit var expandableGroup: ExpandableGroup

    override fun bind(viewHolder: GroupieViewHolder,position: Int) {
        viewHolder.root.tvTitlePlan.text =
            String.format(fragment.getString(R.string.plan),titlePlan)
        viewHolder.itemView.setonClickListener {
            expandableGroup.onToggleExpanded()
            changeStuff(viewHolder)
        }

    }

    override fun getLayout(): Int {
        return R.layout.item_benefit_corporate_parent
    }

    private fun changeStuff(viewHolder: GroupieViewHolder) {
        viewHolder.root.indicator.apply {
            setimageResource(
                if (expandableGroup.isExpanded) R.drawable.ic_arrow_up_red
                else R.drawable.ic_arrow_down_red
            )
        }
    }

    override fun setExpandableGroup(onToggleListener: ExpandableGroup) {
        this.expandableGroup = onToggleListener
    }

}

这是我的ChildItemAdapter

代码
class ChildItemAdapter(
    private val guarantee: String?,private val statusBenefit: String?,private val benefitLimit: Long?
) : Item() {

    override fun bind(viewHolder: GroupieViewHolder,position: Int) {
        viewHolder.root.tvTitleGuaranteeChild.text = guarantee
        viewHolder.root.tvstatusChild.text = statusBenefit
        viewHolder.root.tvBenefitLimitChild.text = benefitLimit?.applyThousandSeparator()
    }

    override fun getLayout(): Int {
        return R.layout.item_benefit_corporate_child
    }

}

这是我的片段。

class CorporateBenefitFragment :
    BaseFragment<FragmentCorporateBenefitBinding,CorporateBenefitviewmodel>() {

    private val groupAdapter = GroupAdapter<GroupieViewHolder>()

    ...

    override fun onViewCreated(view: View,savedInstanceState: Bundle?) {
        super.onViewCreated(view,savedInstanceState)

        ...

        initRecyclerView()

        vm.getBenefitCorporate(regSpaj,msteInsured)
        vm.benefit.observe(viewLifecycleOwner,{
            it?.let {
                when (it) {
                    ...
                    is ResultState.HasData -> {
                        ...
                        mappingData(it.data)
                    }
                    ...
                }
            }
        })
    }

    private fun initRecyclerView() {
        val layoutManager = linearlayoutmanager(activity)
        val divider =
            DividerItemdecoration(binding.expandableBenefit.context,layoutManager.orientation)
        binding.expandableBenefit.layoutManager = layoutManager
        binding.expandableBenefit.adapter = groupAdapter
        binding.expandableBenefit.addItemdecoration(divider)
    }

    private fun mappingData(data: List<Benefit>) {
        val parentList = mutablelistof<ParentItemAdapter>()
        val childList = mutablelistof<ChildItemAdapter>()
        for (i in data) {
            parentList.add(ParentItemAdapter(i.namePlan,requireActivity()))
            for (a in i.detailBenefit) {
                childList.add(ChildItemAdapter(a.kindOfGuarantee,a.benefitStatus,a.benefitLimit))
            }
        }

        groupAdapter.apply {
            for (i in parentList) {
                this += ExpandableGroup(i).apply {
                    for (j in childList) { // I think the problem was here,but I don't kNow how to fix it
                        add(j)
                    }
                }
            }
        }
    }

    ...
}

非常感谢您。

解决方法

我用这段代码解决了我的问题。

private fun mappingData(data: List<Benefit>) {
        val parentList = mutableListOf<ParentItemAdapter>()
        for (i in data) {
            parentList.add(ParentItemAdapter(i.namePlan,requireActivity()))
        }
        groupAdapter.apply {
            for (i in 0 until parentList.size) {
                this += ExpandableGroup(parentList[i]).apply {
                    for (j in data[i].detailBenefit) {
                        add(ChildItemAdapter(j.kindOfGuarantee,j.benefitStatus,j.benefitLimit))
                    }
                }
            }
        }
    }

或与此

private fun mappingData(data: List<Benefit>) {
        for (i in data) {
            val parentItem = ParentItemAdapter(i.namePlan,requireActivity())
            val expandableGroup = ExpandableGroup(parentItem,false)
            for (j in i.detailBenefit) {
                val childItem = ChildItemAdapter(j.kindOfGuarantee,j.benefitLimit)
                expandableGroup.add(Section(childItem))
            }
            groupAdapter.add(expandableGroup)
        }
    }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...