分享Android中ExpandableListView控件使用教程

 更新时间:2015年12月23日 10:57:48   作者:cjjky  
这篇文章主要介绍了Android中ExpandableListView控件使用教程,可以实现二级列表展示效果,需要的朋友可以参考下

本文采用一个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 JNI c/c++调用java的实例

    Android JNI c/c++调用java的实例

    这篇文章主要介绍了Android JNI c/c++调用java的实例的相关资料,需要的朋友可以参考下
    2017-07-07
  • 详解Android Flutter如何使用相机实现拍摄照片

    详解Android Flutter如何使用相机实现拍摄照片

    在app中使用相机肯定是再平常不过的一项事情了,相机肯定涉及到了底层原生代码的调用,那么在flutter中如何快速简单的使用上相机的功能呢?一起来看看吧
    2023-04-04
  • Android WebView使用的技巧与一些坑

    Android WebView使用的技巧与一些坑

    这篇文章主要为大家详细介绍了Android WebView使用的技巧与一些坑,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • Android版学生管理系统

    Android版学生管理系统

    这篇文章主要为大家详细介绍了Android版学生管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 在Android打包中区分测试和正式环境浅析

    在Android打包中区分测试和正式环境浅析

    这篇文章主要给大家介绍了关于在Android打包中如何区分测试和正式环境的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起看看吧。
    2017-10-10
  • Android sharedPreferences实现记住密码功能

    Android sharedPreferences实现记住密码功能

    这篇文章主要为大家详细介绍了Android sharedPreferences实现记住密码功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Android Banner本地和网络轮播图使用介绍

    Android Banner本地和网络轮播图使用介绍

    大家好,本篇文章讲的是Android Banner本地和网络轮播图使用介绍,感兴趣的同学赶快来看一看吧,希望本篇文章对你起到帮助
    2021-11-11
  • 深度剖析Android Binder IPC机制

    深度剖析Android Binder IPC机制

    Android系统的成功离不开其强大的IPC(Inter-Process Communication)机制,其中最引人注目的就是Binder,本文将深入探讨Binder的技术原理,解释其工作方式以及相关的关键概念
    2023-10-10
  • Android编程使用WebView实现文件下载功能的两种方法

    Android编程使用WebView实现文件下载功能的两种方法

    这篇文章主要介绍了Android编程使用WebView实现文件下载功能的两种方法,涉及Android基于WebView的相关文件传输与线程操作技巧,需要的朋友可以参考下
    2018-02-02
  • Android ListView实现无限循环滚动

    Android ListView实现无限循环滚动

    这篇文章主要为大家详细介绍了Android ListView实现无限循环滚动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06

最新评论