QQ手机联系人具有折叠联系人列表的功能,该功能是如何实现的?其实很简单。
实施阶段
1.使用系统控制ExpandableListView执行此功能。ExpandableListView是系统的可折叠控件
?嗯?Xml版本=' 1.0' encoding=' utf-8 '
linear layout xmlns : Android='
Android : orientation=' vertical '
Android : layout _ width=' match _ parent '
Android : layout _ height=' match _ parent '
ExpandableListView
Android : id=' @ id/QQ _ list '
Android : layout _ width=' match _ parent '
Android : layout _ height=' match _ parent '/
/LinearLayout
2.准备数据
Private fun setListData() {
//建立两个主要项目标题
Valtitle _ 1=hashmapstring,string()
Valtitle _ 2=hashmapstring,string()
Valtitle _ 3=hashmapstring,string()
title _ 1[' group ']='林炳文'
title _ 2[' group ']='文炳林'
Gruo(标题_ 1)
Gruo(标题_ 2)
//创建次项目内容
//内容1
valtitle _ 1 _ content _ 1=hash mapstring,string()
valtitle _ 1 _ content _ 2=hash mapstring,string()
valtitle _ 1 _ content _ 3=hash mapstring,string()
Title_1_content_1['child']='操作者'
Title_1_content_2['child']='学生'
Title_1_content_3['child']='农民'
Valchilds _ 1=arraylistmapstring,string()
C(title_1_content_1)
C(title_1_content_2)
C(title_1_content_3)
//内容2
valtitle _ 2 _ content _ 1=hash mapstring,string()
valtitle _ 2 _ content _ 2=hash mapstring,string()
valtitle _ 2 _ content _ 3=hash mapstring,string()
Title_2_content_1['child']='猩猩'
Title_2_content_2['child']='老虎'
Title_2_content_3['child']='狮子'
Title_2_content_3['child']='狮子'
Valchilds _ 2=arraylistmapstring,string()
C(title_2_content_1)
C(title_2_content_2)
C(title_2_content_3)
C(childs_1)
C(childs_2)
SetAdapter()
}
3.准备项目布局文件
LinearLayout
xmlns : Android='
Android : orientation=' vertical '
Android : layout _ width=' match _ parent '
Android : layout _ height=' wrap _ content '
TextView
android:id="@+id/textGroup" android:layout_width="fill_parent" android:layout_height="fill_parent" android:paddingLeft="40dp" android:paddingTop="6dp" android:paddingBottom="6dp" android:textSize="25sp" android:text="No data"/> </LinearLayout> <LinearLayout xmlns:android="; android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/textChild" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingLeft="60dp" android:paddingTop="10dp" android:paddingBottom="10dp" android:textSize="20sp" android:text="No Data" /> </LinearLayout>3.设置适配器
private fun setAdapter() { //创建ExpandableList的Adapter容器 参数: // 1.上下文 // 2.一级集合 // 3.一级样式文件 // 4. 一级条目键值 // 5.一级显示控件名 // 6. 二级集合 // 7. 二级样式 // 8.二级条目键值 // 9.二级显示控件名 val simpleExpandableListAdapter = SimpleExpandableListAdapter( this, gruops, R.layout.groups, arrayOf("group"), intArrayO), childs, R.layout.childs, arrayOf("child"), intArrayO) ) qq_li(simpleExpandableListAdapter) }4.搞定!是的你没有看错,这就搞定了(如果你还想进行自定义其他的布局文件,需要继承并自定义适配器,然后也同样的简单)
Screen
总结
完整的逻辑代码
class QQContactActivity : Activity() { var gruops = ArrayList<Map<String, String>>() var childs = ArrayList<List<Map<String, String>>>() override fun onCreate(savedInstanceState: Bundle?) { (savedInstanceState) setContentView) setListData() } private fun setListData() { // 创建二个一级条目标题 val title_1 = HashMap<String, String>() val title_2 = HashMap<String, String>() val title_3 = HashMap<String, String>() title_1["group"] = "林炳文" title_2["group"] = "文炳林" gruo(title_1) gruo(title_2) // 创建二级条目内容 // 内容一 val title_1_content_1 = HashMap<String, String>() val title_1_content_2 = HashMap<String, String>() val title_1_content_3 = HashMap<String, String>() title_1_content_1["child"] = "工人" title_1_content_2["child"] = "学生" title_1_content_3["child"] = "农民" val childs_1 = ArrayList<Map<String, String>>() c(title_1_content_1) c(title_1_content_2) c(title_1_content_3) // 内容二 val title_2_content_1 = HashMap<String, String>() val title_2_content_2 = HashMap<String, String>() val title_2_content_3 = HashMap<String, String>() title_2_content_1["child"] = "猩猩" title_2_content_2["child"] = "老虎" title_2_content_3["child"] = "狮子" title_2_content_3["child"] = "狮子" val childs_2 = ArrayList<Map<String, String>>() c(title_2_content_1) c(title_2_content_2) c(title_2_content_3) c(childs_1) c(childs_2) setAdapter() } private fun setAdapter() { //创建ExpandableList的Adapter容器 参数: // 1.上下文 // 2.一级集合 // 3.一级样式文件 // 4. 一级条目键值 // 5.一级显示控件名 // 6. 二级集合 // 7. 二级样式 // 8.二级条目键值 // 9.二级显示控件名 val simpleExpandableListAdapter = SimpleExpandableListAdapter( this, gruops, R.layout.groups, arrayOf("group"), intArrayO), childs, R.layout.childs, arrayOf("child"), intArrayO) ) qq_li(simpleExpandableListAdapter) } }