Android Kotlin实现ExpandableListView二级列表

2 篇文章 0 订阅
2 篇文章 0 订阅

一、现实效果

在这里插入图片描述

二、导入依赖

dependencies {
   	//二级列表
    implementation 'com.hgDendi:expandable-recyclerview-adapter:1.0.1'
}

三、详细代码

  1. activity_home.xml布局内
<ExpandableListView
    android:id="@+id/expandable_list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
  1. HomeActivity.kt内
class HomeActivity : BaseActivity() {

    override fun initView() {
        ExpandableListView()
    }

    private fun ExpandableListView() {
        var group = arrayOf("薛之谦", "告五人", "许嵩")
        val child = arrayOf(arrayOf("慢半拍", "绅士", "动物世界", "像风一样"),
            arrayOf("带我去找夜生活", "法兰西多士", "爱人错过", "给你一瓶魔法药水"),
            arrayOf("素颜", "有何不可", "雅俗共赏", "幻听"))
        var adapter = ExpandableListViewAdapter(this, group, child)
        expandable_list.setAdapter(adapter)

        expandable_list.setOnGroupClickListener { parent, v, groupPosition, id -> false }
        expandable_list.setOnChildClickListener { parent, v, groupPosition, childPosition, id -> false }
    }

    override fun getlayoutId(): Int {
        return R.layout.activity_home;
    }
  1. ExpandableListViewAdapter适配器内
class ExpandableListViewAdapter :ExpandableListAdapter {

    var mContext: Context? = null
    var group: Array<String>? = null
    var child: Array<Array<String>>? = null

    constructor(context: Context, group: Array<String>, child: Array<Array<String>>) {
        this.mContext = context
        this.group = group
        this.child = child
    }

    override fun registerDataSetObserver(observer: DataSetObserver?) {}

    override fun unregisterDataSetObserver(observer: DataSetObserver?) {}

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

    override fun getChildrenCount(groupPosition: Int): Int { return child!!.size }

    override fun getGroup(groupPosition: Int): Any { return group!!.get(groupPosition) }

    override fun getChild(groupPosition: Int, childPosition: Int): Any { return child!!.get(childPosition) }

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

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

    override fun hasStableIds(): Boolean { return true }

    override fun getGroupView(groupPosition: Int, isExpanded: Boolean, convertView: View?, parent: ViewGroup?): View {
        val li = mContext?.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
        val view = convertView ?: li.inflate(R.layout.item_group, parent, false)
        view.tv_group.text = group?.get(groupPosition).toString()
        return view
    }

    override fun getChildView(groupPosition: Int, childPosition: Int, isLastChild: Boolean, convertView: View?, parent: ViewGroup?): View {
        val li = mContext?.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
        val view = convertView ?: li.inflate(R.layout.item_child, parent, false)
        view.tv_child.text = (child!![groupPosition][childPosition])
        view.simple.rating = Random.nextInt(5).toFloat()
        return view
    }

    override fun isChildSelectable(groupPosition: Int, childPosition: Int): Boolean { return true }

    override fun areAllItemsEnabled(): Boolean { return false }

    override fun isEmpty(): Boolean { return false }

    override fun onGroupExpanded(groupPosition: Int) {}

    override fun onGroupCollapsed(groupPosition: Int) {}

    override fun getCombinedChildId(groupId: Long, childId: Long): Long { return 0 }

    override fun getCombinedGroupId(groupId: Long): Long { return 0 }
}
  1. item_group.xml和item_child.xml内
<!--item_group.xml内-->
<TextView
        android:id="@+id/tv_group"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="一级列表"
        android:textColor="@color/black"
        android:textSize="14sp"
        android:layout_marginLeft="@dimen/dp_20"/>

<!--item_child.xml内-->
<TextView
        android:id="@+id/tv_child"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="二级列表"
        android:textColor="@color/black"
        android:textSize="12sp"
        android:layout_marginLeft="@dimen/dp_30"/>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值