首页 > 代码库 > 关于安卓开发实现可展开的列表组件

关于安卓开发实现可展开的列表组件

三个布局文件 main.xml      childs.xml      groups.xml

一个java文件  List_lianxi.java

main.xml文件代码

 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3     android:layout_width="fill_parent" 4     android:layout_height="fill_parent" 5     android:orientation="vertical" > 6     <ExpandableListView  7         android:id="@id/android:list" 8         android:layout_width="fill_parent" 9         android:layout_height="fill_parent"10         android:drawSelectorOnTop="false"11                 />12     <TextView 13         android:layout_width="fill_parent"14         android:layout_height="fill_parent"15         android:id="@id/android:empty"16         android:text="No Data"/> 17 18 </LinearLayout>
main.xml

注意android:id="@id/android:list"
 id 固定  否则无法运行

groups.xml文件代码

 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3     android:layout_width="fill_parent" 4     android:layout_height="fill_parent" 5     android:orientation="vertical" > 6     <TextView 7         android:layout_width="fill_parent" 8         android:layout_height="fill_parent" 9         android:id="@+id/group"10         android:textSize="25sp"11         android:paddingLeft="35dp"12         android:paddingRight="5dp"13         android:paddingTop="10dp"14         android:paddingBottom="10dp"15         android:text="No Data"/>16 17 </LinearLayout>
groups.xml

childs.xml文件代码

 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3     android:layout_width="fill_parent" 4     android:layout_height="fill_parent" 5     android:orientation="vertical" > 6     <TextView 7         android:layout_width="fill_parent" 8         android:layout_height="fill_parent" 9         android:id="@+id/child"10         android:textSize="15sp"11         android:paddingLeft="25dp"12         android:paddingTop="10dp"13         android:paddingRight="5dp"14         android:paddingBottom="10dp"15         android:text="No Data" 16         />17     18 19 </LinearLayout>
childs.xml

List_lianxi.java

 1 package lianxi; 2  3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 import java.util.Map; 7  8 import com.example.jichu_lianxi.R; 9 10 11 import android.app.ExpandableListActivity;12 import android.os.Bundle;13 import android.view.View;14 import android.widget.ExpandableListView;15 import android.widget.SimpleExpandableListAdapter;16 17 public class List_lianxi extends ExpandableListActivity{            //继承ExpandableListActivity18     @Override19     public void onCreate(Bundle savedInstanceState) {20         // TODO Auto-generated method stub21         super.onCreate(savedInstanceState);22         setContentView(R.layout.main);                               23         24         //创建一级条目容器25         List<Map<String,String>>groups = new ArrayList<Map<String,String>>();26         //创建两个一级条目标题27         Map<String, String>group1 = new HashMap<String, String>();28         group1.put("group", "音乐");29         Map<String, String>group2 = new HashMap<String, String>();30         group2.put("group", "歌词");31         groups.add(group1);32         groups.add(group2);33         //创建一级条目下的二级条目34         List<Map<String, String>> child_one = new  ArrayList<Map<String,String>>();35         //在一级条目目录下创建两个对应的二级条目目录36         Map<String, String> child_one_1 = new HashMap<String, String>();37         child_one_1.put("child", "青花瓷");38         Map<String, String> child_one_2 = new HashMap<String, String>();39         child_one_2.put("child", "东风破");40         child_one.add(child_one_1);41         child_one.add(child_one_2);42         43         //第二个二级条目目录44         List<Map<String, String>> child_two = new  ArrayList<Map<String,String>>();45         Map<String, String> child_two_1 = new HashMap<String, String>();46         child_two_1.put("child", "青花瓷.lrc");47         Map<String, String> child_two_2 = new HashMap<String, String>();48         child_two_2.put("child", "东风破.lrc");49         child_two.add(child_two_1);50         child_two.add(child_two_2);51         52         //将二级条目目录放在一个集合里供显示时使用53         List<List<Map<String, String>>>childs = new ArrayList<List<Map<String,String>>>();54         childs.add(child_one);55         childs.add(child_two);56         57         /*58          * 使用SimpleExpandableListAdapter显示ExpandableListView59          * 参数1:上下文对象Context60          * 参数2:一级条目目录集合61          * 参数3:一级条目对应的布局文件62          * 参数4:fromto,map中的key,指定要显示的对象63          * 参数5:与参数4对应,指定要显示在groups中的id64          * 参数6:二级条目目录集合65          * 参数7:二级条目对应的布局文件66          * 参数8:fromto.map中的key,指定要显示的对象67          * 参数9:与参数8对应,指定要显示在childs中的id68          */69         SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter(this, groups, R.layout.groups, new String[]{"group"}, new int[]{R.id.group}, childs, R.layout.childs, new String[]{"child"}, new int[]{R.id.child});70         setListAdapter(adapter);71 72     }73     //设置哪个二级目录被默认选中74     @Override75     public boolean setSelectedChild(int groupPosition, int childPosition,76             boolean shouldExpandGroup) {77         // TODO Auto-generated method stub78         return super.setSelectedChild(groupPosition, childPosition, shouldExpandGroup);79     }80     //设置哪个一级目录被默认选中81     @Override82     public void setSelectedGroup(int groupPosition) {83         // TODO Auto-generated method stub84         super.setSelectedGroup(groupPosition);85     }//当二级条目被点击时响应86     @Override87     public boolean onChildClick(ExpandableListView parent, View v,88             int groupPosition, int childPosition, long id) {89         // TODO Auto-generated method stub90         return super.onChildClick(parent, v, groupPosition, childPosition, id);91     }92 }
List_lianxi。java

运行效果:

参考代码源于:<<Android经典应用>>赵书兰 编著 p101---p105

其中有2个错误

1、main.xml中的 android:id="@+id/list" 应该为 android:id="@id/android:list"    否则运行出错

2、p102页 grouds.xml文件代码应该为groups.xml

 

关于安卓开发实现可展开的列表组件