You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中ExpandableListView隐藏无有效子项的展开空视图

解决ExpandableListView空子视图隐藏问题

核心思路

通过Adapter控制子项数量,并拦截父项点击事件,当子列表全为空字符串时,既不返回子项数量,也阻止父项展开,从根源上避免空视图的渲染。

步骤1:修改ExpandableListAdapter

在你的Adapter类中添加判断子列表有效性的工具方法,并修改getChildrenCount方法:

class YourExpandableAdapter(
    private val context: Context,
    private val groupList: List<YourGroupModel>
) : BaseExpandableListAdapter() {

    // 判断子列表是否为空或全是空字符串
    private fun isChildrenEmpty(children: List<String>): Boolean {
        return children.isEmpty() || children.all { it.isBlank() }
    }

    override fun getChildrenCount(groupPosition: Int): Int {
        val children = groupList[groupPosition].children
        // 空列表或全为空字符串时返回0,不渲染子视图
        return if (isChildrenEmpty(children)) 0 else children.size
    }

    // 其他原有方法保持不变...
}

步骤2:拦截父项点击事件

在你的Fragment中,给ExpandableListView设置点击拦截,阻止空子项的父项展开:

class YourFragment : Fragment() {
    private lateinit var expandableListView: ExpandableListView
    private lateinit var adapter: YourExpandableAdapter

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        expandableListView = view.findViewById(R.id.expandable_list)
        adapter = YourExpandableAdapter(requireContext(), yourGroupData)
        expandableListView.setAdapter(adapter)

        // 拦截父项点击
        expandableListView.setOnGroupClickListener { _, _, groupPosition, _ ->
            val children = adapter.groupList[groupPosition].children
            if (adapter.isChildrenEmpty(children)) {
                true // 返回true表示消费事件,不展开父项
            } else {
                false // 允许正常展开
            }
        }
    }

    // 其他原有代码保持不变...
}

补充说明

  • 如果Adapter未直接暴露数据源,可添加公开方法获取指定位置的子列表:
fun getChildrenAt(groupPosition: Int): List<String> {
    return groupList[groupPosition].children
}

之后在Fragment中调用adapter.getChildrenAt(groupPosition)进行判断即可。

  • 这种方式让系统直接跳过空子视图的创建,比单独设置子项布局可见性更可靠,不会出现无效的空白区域。

内容的提问来源于stack exchange,提问作者S S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 03:57:00