一、现实效果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/59788db18107ef638af024ba79d79588.jpeg)
二、导入依赖
dependencies {
implementation 'com.hgDendi:expandable-recyclerview-adapter:1.0.1'
}
三、详细代码
- activity_home.xml布局内
<ExpandableListView
android:id="@+id/expandable_list"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
- 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;
}
- 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 }
}
- 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"/>