【问题标题】:Android Kotlin: Groupie RecyclerView All Items Added To The Same Expandable ItemAndroid Kotlin:Groupie Recycler查看添加到同一个可扩展项目的所有项目
【发布时间】:2020-09-29 07:32:45
【问题描述】:

首先,我的问题与this 相同。但我的代码不同,我尝试关注this,但没有解决我的问题。

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

  • 标题 1
    • 子标题 1
    • 子标题 1
    • 子标题 1
  • 标题 2
    • 子标题 2
    • 子标题 2

我有这个:

  • 标题 1
    • 子标题 1
    • 子标题 1
    • 子标题 1
    • 子标题 2
    • 子标题 2
  • 标题 2
    • 子标题 1
    • 子标题 1
    • 子标题 1
    • 子标题 2
    • 子标题 2

这是我的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)
                    }
                }
            }
        }
    }

    ...
}

非常感谢。

【问题讨论】:

    标签: android android-recyclerview expandablelistview


    【解决方案1】:

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

    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.benefitStatus, j.benefitLimit)
                    expandableGroup.add(Section(childItem))
                }
                groupAdapter.add(expandableGroup)
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2019-06-27
      • 1970-01-01
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-31
      • 1970-01-01
      • 2018-01-06
      相关资源
      最近更新 更多