分享Android中ExpandableListView控件使用教程

所属分类: 软件编程 / Android 阅读数: 1248
收藏 0 赞 0 分享

本文采用一个Demo来展示Android中ExpandableListView控件的使用,如如何在组/子ListView中绑定数据源。直接上代码如下:
程序结构图:

layout目录下的 main.xml 文件源码如下:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:orientation="vertical" 
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent"> 
  <!-- 我们会自己定义listview的显示方式(在另外一个布局文件里边)不用默认的方式  
     如果自定义listview的显示方式这里这个android:id="@id/android:list" 必须这样写 --> 
  <!-- android:drawSelectOnTop="false"此属性用来设置listview上的背景颜色会不会 
   挡住(覆盖)内容 , 如果这是为false就表示不会覆盖掉 -->  
  <ExpandableListView  
    android:id="@id/android:list"         
    android:layout_width="fill_parent"         
    android:layout_height="wrap_content"        
    android:layout_weight="1"         
    android:drawSelectorOnTop="false"/>  
</LinearLayout> 

包com.andyidea.demo中ContactsActivity.java源码如下:

package com.andyidea.demo; 
 
import java.util.ArrayList; 
import java.util.List; 
 
import android.app.ExpandableListActivity; 
import android.os.Bundle; 
import android.view.Gravity; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.Window; 
import android.widget.AbsListView; 
import android.widget.BaseExpandableListAdapter; 
import android.widget.TextView; 
 
public class ContactsActivity extends ExpandableListActivity { 
   
  List<String> group;      //组列表 
  List<List<String>> child;   //子列表 
  ContactsInfoAdapter adapter; //数据适配器 
   
  /** Called when the activity is first created. */ 
  @Override 
  public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); //设置为无标题 
    setContentView(R.layout.main); 
    getExpandableListView().setBackgroundResource(R.drawable.default_bg); 
     
    initializeData(); 
    getExpandableListView().setAdapter(new ContactsInfoAdapter()); 
    getExpandableListView().setCacheColorHint(0); //设置拖动列表的时候防止出现黑色背景 
  } 
   
  /** 
   * 初始化组、子列表数据 
   */ 
  private void initializeData(){ 
    group = new ArrayList<String>(); 
    child = new ArrayList<List<String>>(); 
     
    addInfo("Andy",new String[]{"male","138123***","GuangZhou"}); 
    addInfo("Fairy",new String[]{"female","138123***","GuangZhou"}); 
    addInfo("Jerry",new String[]{"male","138123***","ShenZhen"}); 
    addInfo("Tom",new String[]{"female","138123***","ShangHai"}); 
    addInfo("Bill",new String[]{"male","138231***","ZhanJiang"}); 
     
  } 
   
  /** 
   * 模拟给组、子列表添加数据 
   * @param g-group 
   * @param c-child 
   */ 
  private void addInfo(String g,String[] c){ 
    group.add(g); 
    List<String> childitem = new ArrayList<String>(); 
    for(int i=0;i<c.length;i++){ 
      childitem.add(c[i]); 
    } 
    child.add(childitem); 
  } 
   
  class ContactsInfoAdapter extends BaseExpandableListAdapter{ 
 
     
    //-----------------Child----------------// 
    @Override 
    public Object getChild(int groupPosition, int childPosition) { 
      return child.get(groupPosition).get(childPosition); 
    } 
     
    @Override 
    public long getChildId(int groupPosition, int childPosition) { 
      return childPosition; 
    } 
     
    @Override 
    public int getChildrenCount(int groupPosition) { 
      return child.get(groupPosition).size(); 
    } 
     
    @Override 
    public View getChildView(int groupPosition, int childPosition, 
        boolean isLastChild, View convertView, ViewGroup parent) { 
      String string = child.get(groupPosition).get(childPosition);  
      return getGenericView(string); 
    } 
     
    //----------------Group----------------// 
    @Override 
    public Object getGroup(int groupPosition) { 
      return group.get(groupPosition); 
    }         
 
    @Override 
    public long getGroupId(int groupPosition) { 
      return groupPosition; 
    }   
     
    @Override 
    public int getGroupCount() { 
      return group.size(); 
    }   
     
    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded, 
        View convertView, ViewGroup parent) { 
      String string = group.get(groupPosition);  
      return getGenericView(string); 
    } 
 
    //创建组/子视图  
    public TextView getGenericView(String s) {  
      // Layout parameters for the ExpandableListView  
      AbsListView.LayoutParams lp = new AbsListView.LayoutParams(  
          ViewGroup.LayoutParams.FILL_PARENT, 40); 
  
      TextView text = new TextView(ContactsActivity.this);  
      text.setLayoutParams(lp);  
      // Center the text vertically  
      text.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);  
      // Set the text starting position  
      text.setPadding(36, 0, 0, 0);  
        
      text.setText(s);  
      return text;  
    }  
     
     
    @Override 
    public boolean hasStableIds() { 
      // TODO Auto-generated method stub 
      return false; 
    }     
 
    @Override 
    public boolean isChildSelectable(int groupPosition, int childPosition) { 
      // TODO Auto-generated method stub 
      return true; 
    } 
     
  } 
} 

最后,程序运行后截图如下:

希望本文所述对大家学习Android软件编程有所帮助。

更多精彩内容其他人还在看

Android网络编程之获取网络上的Json数据实例

这篇文章主要介绍了Android网络编程之获取网络上的Json数据实例,本文用完整的代码实例讲解了在Android中读取网络中Json数据的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中的windowSoftInputMode属性详解

这篇文章主要介绍了Android中的windowSoftInputMode属性详解,本文对windowSoftInputMode的9个属性做了详细总结,需要的朋友可以参考下
收藏 0 赞 0 分享

Android网络编程之UDP通信模型实例

这篇文章主要介绍了Android网络编程之UDP通信模型实例,本文给出了服务端代码和客户端代码,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中使用ListView实现漂亮的表格效果

这篇文章主要介绍了Android中使用ListView实现漂亮的表格效果,本文用详细的代码实例创建了一个股票行情表格,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中刷新界面的二种方法

这篇文章主要介绍了Android中刷新界面的二种方法,本文使用Handler、postInvalidate两种方法实现界面刷新,需要的朋友可以参考下
收藏 0 赞 0 分享

Android SDK三种更新失败及其解决方法

这篇文章主要介绍了Android SDK三种更新失败及其解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(一)

Android3.0(API level 11)开始,Android设备不再需要专门的菜单键。随着这种变化,Android app应该取消对传统6项菜单的依赖。取而代之的是提供anction bar来提供基本的用户功能
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(二)

这次将继续上一篇文章没有讲完的Menu的学习,上下文菜单(Context menu)和弹出菜单(Popup menu)
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(三)

今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习,需要的朋友可以参考下
收藏 0 赞 0 分享

Android显示网络图片实例

这篇文章主要介绍了Android显示网络图片的方法,以实例形式展示了Android程序显示网络图片的方法,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多