学习Android实现可折叠ListView(ExpandableListView)

首先要说明的是,本文是学习,并非原作者,源地址[Android常用控件(能折叠的ListView)–ExpandableListView的使用模仿QQ好友列表(http://blog.csdn.net/dl10210950/article/details/52525492)]

控件:

<ExpandableListView
        android:id="@+id/expendableListview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

Adapter:

class MyAdapter(
        private var mContext : Context,
        /** group 数据 */
        private var groupList: ArrayList<String>,
        /** child 数据 */
        private var childList : ArrayList<ArrayList<String>>) : BaseExpandableListAdapter() {

    override fun getGroup(groupPosition: Int): Any {
        return groupPosition
    }

    override fun isChildSelectable(p0: Int, p1: Int): Boolean {
        return true
    }

    override fun hasStableIds(): Boolean {
        return true
    }

    @SuppressLint("SetTextI18n")
    override fun getGroupView(groupPosition: Int, isExpanded: Boolean, convertView: View?, parent: ViewGroup?): View {
        val groupView = View.inflate(mContext, R.layout.item_group, null)

        /** 分组名字 */
        val groupName = groupView.findViewById<TextView>(R.id.groupTvName)
        groupName.text = groupList[groupPosition]
        /** 子元素个数 */
        val count = groupView.findViewById<TextView>(R.id.groupTvCount)
        count.text = "${childList[groupPosition].size} 个"

        return groupView
    }

    /**
     * 这个返回的一定要是对应的item里面的List集合的size
     */
    override fun getChildrenCount(groupPosition: Int): Int {
        return childList[groupPosition].size
    }

    override fun getChild(groupPosition: Int, childPosition: Int): Any {
        return childList[groupPosition][childPosition]
    }

    override fun getGroupId(groupPosition: Int): Long {
        return groupPosition.toLong()
    }

    override fun getChildView(groupPosition: Int, childPosition: Int, isLastChild: Boolean, view: View?, viewGroup: ViewGroup?): View {
        val childView = View.inflate(mContext, R.layout.item_child, null)
        val username = childView.findViewById<TextView>(R.id.childTvUserName)
        username.text = childList[groupPosition][childPosition]
        return childView
    }

    override fun getChildId(groupPosition: Int, childPosition: Int): Long {
        return childPosition.toLong()
    }

    override fun getGroupCount(): Int {
        return groupList.size
    }

}

Main代码:

        val adapter = MyAdapter(this, groupList, childList)

        expendableListview.setAdapter(adapter)

代码我已上传到Github:https://github.com/fengwenyi/ExpendableListviewDemo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冯文议

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值