Android开发系列(八) ExpandableListView的使用方法

  前几天曾经写过ListView的使用方法,并且设计了一个QQ联系人列表。今天在此基础上讲一下ExpandableListView的用法,与之前一样,这里分成两节,首先讲使用SimpleExpandableListAdapter的使用,后面如果搜集到足够的材料会讲一下自定义适配器的ExpandableListView的使用,到时候,会把之前的QQ联系人列表进行一下升级。

  

  与ListView类似,首先是xml布局文件,布局文件要有三个,一个是放置ExpandableListView的主布局文件,一个是一级条目的布局文件,另一个是二级条目(即子菜单)的布局文件。

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <!-- 注意这里的id还是系统自带的list -->
    <ExpandableListView 
        android:id="@android:id/list"               
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    

</LinearLayout>

group_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
    
    <TextView 
        android:id="@+id/myGroup"
        android:layout_width="match_parent"
        android:layout_height="50dip"
        android:paddingLeft="50dip"
        android:textSize="12pt"
        android:gravity="center_vertical"/>
    

</LinearLayout>

 

child_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
    <TextView 
        android:id="@+id/myChild"
        android:layout_width="match_parent"
        android:layout_height="40dip"
        android:paddingLeft="70dip"
        android:textSize="10pt"
        android:gravity="center_vertical"/>
    

</LinearLayout>

 

然后就设置一下MainActivity类就可以了,这里MainActivity类需要继承 ExpandableListView类

package com.example.android_expandablelistview;

import java.util.*;

import android.os.Bundle;
import android.app.Activity;
import android.app.ExpandableListActivity;
import android.view.Menu;
import android.widget.SimpleExpandableListAdapter;

public class MainActivity extends ExpandableListActivity {
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        //设置一级条目的数据
        String[] keysOfGroup={"groupName"};
        String[] valuesOfGroup={"group1","group2"};
        ArrayList<HashMap<String,String>> listOfGroup=getDataList(keysOfGroup, valuesOfGroup);
        
        //设置二级条目的数据,一级条目有几个,就要创建几个二级条目的list
        String[] keysOfChild={"childName"};  
        //因为不同的一级条目内的子条目对应的键名应该是统一的,所以这里不再单独为每一个子条目设计键名,而是用二级条目共有的键名
        //group1的子条目的Value值
        String[] valuesOfChild1={"child1Data1","child1Data2"};
        //group2的子条目的Value值
        String[] valuesOfChild2={"child2Data1"};
        
        ArrayList<HashMap<String,String>> listOfChild1=getDataList(keysOfChild, valuesOfChild1);
        ArrayList<HashMap<String,String>> listOfChild2=getDataList(keysOfChild, valuesOfChild2);
        
        //还要定义一个List对象,将所有的二级条目对应的List按照与group相对应的顺序装进一个list中
        ArrayList<ArrayList<HashMap<String,String>>> childs=new ArrayList<ArrayList<HashMap<String,String>>> ();
        childs.add(listOfChild1);
        childs.add(listOfChild2);
        
        //创建SimpleExpandableListAdapter对象,这里用的是最简单的那个构造方法!
        SimpleExpandableListAdapter adapter=new SimpleExpandableListAdapter(this, listOfGroup,
                R.layout.group_layout, keysOfGroup,new int[]{R.id.myGroup},
                childs,R.layout.child_layout,keysOfChild,new int[]{R.id.myChild});
        
        setListAdapter(adapter);
        
        
    }
    
    //构造一个能够返回List<Map<String,String>>对象的方法
    /**
     * 
     * @param keys  List中Map的键名,
     * @param values  一个List中包含的全部Item的值,因为每一个Item又对应多个键名,所以使用了一个二维Vector的形式
     * @return  list
     */
    private ArrayList<HashMap<String,String>> getDataList(String[] keys, String[]values){
        ArrayList<HashMap<String,String>> list=new ArrayList<HashMap<String,String>>();
        for(int i=0; i<values.length/keys.length; i++){
            HashMap<String,String> map=new HashMap<String,String>();
            for(int j=0;j<keys.length; j++ ){
                map.put(keys[j], values[i*keys.length+j]);
            }
            list.add(map);
        }
    
        return list;
    }
    
    
    



}

 

效果图:

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。