First, my question is same with this. But my code is different, and I try to follow this but not solve my problem.
So my question is, I would like to have this:
- Header 1
- Child header 1
- Child header 1
- Child header 1
- Header 2
- Child header 2
- Child header 2
I have this instead:
- Header 1
- Child header 1
- Child header 1
- Child header 1
- Child header 2
- Child header 2
- header 2
- Child header 1
- Child header 1
- Child header 1
- Child header 2
- Child header 2
This is my code for 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
}
}
This is my code for 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
}
}
And this is my Fragment.
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)
}
}
}
}
}
...
}
Thank you very much.