Android studio仿QQ好友列表

一、实现原理

1,首先必须在布局文件中定义一个ExpandableListView

2,其次创建一级条目对应的布局文件group

3,创建二级条目对应的布局文件child

4,加载ExpandableListView组件的Activity必须继承自ExpandableListActivity


二、布局与代码

1、首先在主布局中activity_main.xml


  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     android:layout_width="fill_parent"  
  3.     android:layout_height="fill_parent"  
  4.     android:orientation="vertical" >  
  5.   
  6.     <ExpandableListView  
  7.         android:id="@id/android:list"  
  8.         android:layout_width="fill_parent"  
  9.         android:layout_height="fill_parent" />  
  10.   
  11. LinearLayout>


2、其次在drawable文件夹定义布局一级列表groups.xml

  1. <LinearLayout  
  2.     xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6. >  
  7.     <TextView  
  8.         android:id="@+id/textGroup"  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="fill_parent"  
  11.         android:paddingLeft="40px"  
  12.         android:paddingTop="6px"  
  13.         android:paddingBottom="6px"  
  14.         android:textSize="25sp"  
  15.         android:text="No data"  
  16.     />  
  17.   
  18. LinearLayout>  


3、接着在drawable文件夹定义布局二级列表childs.xml

  1. <LinearLayout  
  2.     xmlns:android="http://schemas.android.com/apk/res/android"  
  3.   android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6. >  
  7.     <TextView   
  8.         android:id="@+id/textChild"  
  9.    android:layout_width="fill_parent"  
  10.         android:layout_height="fill_parent"  
  11.         android:paddingLeft="60px"  
  12.         android:paddingTop="10px"  
  13.         android:paddingBottom="10px"  
  14.         android:textSize="20sp"  
  15.    android:text="No Data"  
  16. />  
  17.   
  18. LinearLayout>  

4、然后就是初始化和使用了
  1. public class MainActivity extends ExpandableListActivity {  
  2.     /** 
  3.      * 创建一级条目容器 
  4.      */  
  5.     List> gruops = new ArrayList>();  
  6.     /** 
  7.      * 存放内容, 以便显示在列表中 
  8.      */  
  9.     List>> childs = new ArrayList>>();  
  10.   
  11.     @Override  
  12.     public void onCreate(Bundle savedInstanceState) {  
  13.         super.onCreate(savedInstanceState);  
  14.         setContentView(R.layout.activity_main);  
  15.         setListData();  
  16.     }  
  17.   
  18.     /** 
  19.      * 设置列表内容 
  20.      */  
  21.     public void setListData() {  
  22.         // 创建二个一级条目标题  
  23.         Map title_1 = new HashMap();  
  24.         Map title_2 = new HashMap();  
  25.         Map title_3 = new HashMap();  
  26.         title_1.put("group""林炳文");  
  27.         title_2.put("group""文炳林");  
  28.         gruops.add(title_1);  
  29.         gruops.add(title_2);  
  30.   
  31.         // 创建二级条目内容  
  32.         // 内容一  
  33.         Map title_1_content_1 = new HashMap();  
  34.         Map title_1_content_2 = new HashMap();  
  35.         Map title_1_content_3 = new HashMap();  
  36.         title_1_content_1.put("child""工人");  
  37.         title_1_content_2.put("child""学生");  
  38.         title_1_content_3.put("child""农民");  
  39.   
  40.         List> childs_1 = new ArrayList>();  
  41.         childs_1.add(title_1_content_1);  
  42.         childs_1.add(title_1_content_2);  
  43.         childs_1.add(title_1_content_3);  
  44.   
  45.         // 内容二  
  46.         Map title_2_content_1 = new HashMap();  
  47.         Map title_2_content_2 = new HashMap();  
  48.         Map title_2_content_3 = new HashMap();  
  49.         title_2_content_1.put("child""猩猩");  
  50.         title_2_content_2.put("child""老虎");  
  51.         title_2_content_3.put("child""狮子");  
  52.         List> childs_2 = new ArrayList>();  
  53.         childs_2.add(title_2_content_1);  
  54.         childs_2.add(title_2_content_2);  
  55.         childs_2.add(title_2_content_3);  
  56.   
  57.         childs.add(childs_1);  
  58.         childs.add(childs_2);  
  59.   
  60.         /** 
  61.          * 创建ExpandableList的Adapter容器 参数: 1.上下文 2.一级集合 3.一级样式文件 4. 一级条目键值 
  62.          * 5.一级显示控件名 6. 二级集合 7. 二级样式 8.二级条目键值 9.二级显示控件名 
  63.          *  
  64.          */  
  65.         SimpleExpandableListAdapter sela = new SimpleExpandableListAdapter(  
  66.                 this, gruops, R.drawable.groups, new String[] { "group" },  
  67.                 new int[] { R.id.textGroup }, childs, R.drawable.childs,  
  68.                 new String[] { "child" }, new int[] { R.id.textChild });  
  69.         // 加入列表  
  70.         setListAdapter(sela);  
  71.     }  
  72.   
  73.     /** 
  74.      * 列表内容按下 
  75.      */  
  76.     @Override  
  77.     public boolean onChildClick(ExpandableListView parent, View v,  
  78.             int groupPosition, int childPosition, long id) {  
  79.         Toast.makeText(  
  80.                 MainActivity.this,  
  81.                 "您选择了"  
  82.                         + gruops.get(groupPosition).toString()  
  83.                         + "子编号"  
  84.                         + childs.get(groupPosition).get(childPosition)  
  85.                                 .toString(), Toast.LENGTH_SHORT).show();  
  86.         return super.onChildClick(parent, v, groupPosition, childPosition, id);  
  87.     }  
  88.   
  89.     /** 
  90.      * 二级标题按下 
  91.      */  
  92.     @Override  
  93.     public boolean setSelectedChild(int groupPosition, int childPosition,  
  94.             boolean shouldExpandGroup) {  
  95.         return super.setSelectedChild(groupPosition, childPosition,  
  96.                 shouldExpandGroup);  
  97.     }  
  98.   
  99.     /** 
  100.      * 一级标题按下 
  101.      */  
  102.     @Override  
  103.     public void setSelectedGroup(int groupPosition) {  
  104.         super.setSelectedGroup(groupPosition);  
  105.     }  
  106. }  


你可能感兴趣的:(安卓)