Во-первых, мой вопрос совпадает с этим . Но мой код отличается, и я стараюсь следовать этому но не решить мою проблему.
Итак, у меня вопрос, я бы хотел это:
- Заголовок 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)
}
}
}
}
}
...
}
Большое спасибо.
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)
}
}
Похожие вопросы
Связанные вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.