问题描述
首先,我的问题与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)
}
}