ExpandableListView

  ExpandableListView是一种双层显示的View,为什么这么说呢,以我们的QQ为例,打开我们的QQ,我们首先会有一个联系人的分组,点击分组我们会看到分组内联系人的列表。这就是一种双层显示的View。ExpandableListView相当于两层的ListView嵌套。
  
  ExpandableListView的使用与ListView类似,只不过ExpandableListView在创建Adapter的时候需要重写两倍的ListView重写的方法(原因就是:ExpandableListView相当于两层的ListView嵌套)。ExpandableListView在创建Adapter需要继承BaseExpandableListAdapter。下面来看一下具体的代码:

  • 创建数据。我们以班级为分组。分别创建4个班,然后每个班有不同的学生。
//班级类public class Clazz {    private String clazzName;    private String clazzNum;    private List<Student> students;    /* 定义一个初始化的构造器。 */    public Clazz(String clazzName, String clazzNum) {        this.clazzName = clazzName;        this.clazzNum = clazzNum;    }    public String getClazzName() {        return clazzName;    }    public void setClazzName(String clazzName) {        this.clazzName = clazzName;    }    public String getClazzNum() {        return clazzNum;    }    public void setClazzNum(String clazzNum) {        this.clazzNum = clazzNum;    }    public List<Student> getStudents() {        return students;    }    public void setStudents(List<Student> students) {        this.students = students;    }}
//学生类public class Student {    private String studentName;    private String age;    private String sex;    private String label;    /* 定义初始化的构造器 */    public Student(String label, String studentName, String age, String sex) {        this.label = label;        this.studentName = studentName;        this.age = age;        this.sex = sex;    }    public String getStudentName() {        return studentName;    }    public void setStudentName(String studentName) {        this.studentName = studentName;    }    public String getAge() {        return age;    }    public void setAge(String age) {        this.age = age;    }    public String getSex() {        return sex;    }    public void setSex(String sex) {        this.sex = sex;    }    public String getLabel() {        return label;    }    public void setLabel(String label) {        this.label = label;    }}
  • 自定义Adapter以及布局,将数据添加到布局中。

学生布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:gravity="center|left">    <ImageView  android:id="@+id/imageview_student" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/a_mall_04"/>    <TextView  android:id="@+id/textview_student_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:text="学生姓名"/>    <LinearLayout  android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:layout_marginLeft="10dp">        <TextView  android:id="@+id/textview_student_age" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="学生年龄"/>        <TextView  android:id="@+id/textview_student_sex" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="学生性别"/>    </LinearLayout>    <TextView  android:id="@+id/textview_student_label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:text="学生签名"/></LinearLayout>


班级布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:gravity="center|left">    <TextView  android:id="@+id/textview_clazz_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="班级名称" android:layout_marginLeft="50dp"/>    <TextView  android:id="@+id/textview_clazz_num" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="班级编号" android:layout_marginLeft="10dp"/>    <TextView  android:id="@+id/textview_student_num" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="班级人数" android:layout_marginLeft="10dp"/></LinearLayout>

自定义的Adapter

public class MyExpandableListViewAdapter extends BaseExpandableListAdapter {    private LayoutInflater mInflater;    private List<Clazz> mClazzs;    /* 定义一个构造器 */    public MyExpandableListViewAdapter(LayoutInflater mInflater, List<Clazz> mClazzs) {        this.mInflater = mInflater;        this.mClazzs = mClazzs;    }    @Override    public int getGroupCount() {        return mClazzs.size();    }    @Override    public int getChildrenCount(int groupPosition) {        return mClazzs.get(groupPosition).getStudents().size();    }    @Override    public Object getGroup(int groupPosition) {        return groupPosition;    }    @Override    public Object getChild(int groupPosition, int childPosition) {        return childPosition;    }    @Override    public long getGroupId(int groupPosition) {        return groupPosition;    }    @Override    public long getChildId(int groupPosition, int childPosition) {        return childPosition;    }    @Override    public boolean hasStableIds() {        return false;    }    //将班级数据添加到组布局中    @Override    public View getGroupView(int groupPosition, boolean b, View convertview, ViewGroup viewGroup) {        GroupViewHolder groupViewHolder = null;        if(convertview == null){            convertview = mInflater.inflate(R.layout.item_parent_view,null);            groupViewHolder = new GroupViewHolder();            groupViewHolder.textViewClazzName = (TextView) convertview.findViewById(R.id.textview_clazz_name);            groupViewHolder.textViewClazzNum = (TextView) convertview.findViewById(R.id.textview_clazz_num);            groupViewHolder.textViewClazzStudentNum = (TextView) convertview.findViewById(R.id.textview_student_num);            convertview.setTag(groupViewHolder);        }else{            groupViewHolder = (GroupViewHolder) convertview.getTag();        }        Clazz clazz = mClazzs.get(groupPosition);        groupViewHolder.textViewClazzName.setText(clazz.getClazzName());        groupViewHolder.textViewClazzNum.setText(clazz.getClazzNum());        groupViewHolder.textViewClazzStudentNum.setText(""+clazz.getStudents().size());        return convertview;    }    class GroupViewHolder{        TextView textViewClazzName;        TextView textViewClazzNum;        TextView textViewClazzStudentNum;    }    //将学生数据添加到自布局中    @Override    public View getChildView(int groupPosition, int childPosition, boolean b, View convertview, ViewGroup viewGroup) {        ChildViewHolder childViewHolder = null;        if(convertview == null){            convertview = mInflater.inflate(R.layout.item_child_view,null);            childViewHolder = new ChildViewHolder();            childViewHolder.textViewStudentName = (TextView) convertview.findViewById(R.id.textview_student_name);            childViewHolder.textViewStudentAge = (TextView) convertview.findViewById(R.id.textview_student_age);            childViewHolder.textViewStudentSex = (TextView) convertview.findViewById(R.id.textview_student_sex);            childViewHolder.textViewStudentLabel = (TextView) convertview.findViewById(R.id.textview_student_label);            convertview.setTag(childViewHolder);        }else{            childViewHolder = (ChildViewHolder) convertview.getTag();        }        Clazz clazz = mClazzs.get(groupPosition);        Student student = clazz.getStudents().get(childPosition);        childViewHolder.textViewStudentName.setText(student.getStudentName());        childViewHolder.textViewStudentAge.setText(student.getAge());        childViewHolder.textViewStudentSex.setText(student.getSex());        childViewHolder.textViewStudentLabel.setText(student.getLabel());        return convertview;    }    class ChildViewHolder{        TextView textViewStudentName;        TextView textViewStudentAge;        TextView textViewStudentSex;        TextView textViewStudentLabel;    }    @Override    public boolean isChildSelectable(int groupPosition, int childPosition) {        return false;    }}
  • 初始化数据,并将View添加到ExpandableListView中。
public class MainActivity extends Activity {    private ExpandableListView mExpandableListView;    private List<Clazz> mClazzs;    private LayoutInflater mInflater;    private MyExpandableListViewAdapter mMyAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mExpandableListView = (android.widget.ExpandableListView) findViewById(R.id.expandablelistview);        initData();        mInflater = getLayoutInflater();        mMyAdapter = new MyExpandableListViewAdapter(mInflater,mClazzs);        mExpandableListView.setAdapter(mMyAdapter);    }    /* 初始化数据 */    private void initData() {        mClazzs = new ArrayList<Clazz>();        //初始化一班        Clazz clazz1 = new Clazz("一班","201501");        List<Student> clazz1Students = new ArrayList<Student>();        Student clazz1_Student1 = new Student("生命在于运动","张三","17","男");        clazz1Students.add(clazz1_Student1);        Student clazz1_Student2 = new Student("生命在于运动","李四","19","女");        clazz1Students.add(clazz1_Student2);        Student clazz1_Student3 = new Student("生命在于运动","王五","17","男");        clazz1Students.add(clazz1_Student3);        Student clazz1_Student4 = new Student("生命在于运动","赵六","20","男");        clazz1Students.add(clazz1_Student4);        Student clazz1_Student5 = new Student("生命在于运动","马奇","18","女");        clazz1Students.add(clazz1_Student5);        clazz1.setStudents(clazz1Students);        mClazzs.add(clazz1);        //初始化二班        Clazz clazz2 = new Clazz("二班","201502");        List<Student> clazz2Students = new ArrayList<Student>();        Student clazz2_Student1 = new Student("生命在于运动","张三","17","男");        clazz2Students.add(clazz2_Student1);        Student clazz2_Student2 = new Student("生命在于运动","李四","19","女");        clazz2Students.add(clazz2_Student2);        Student clazz2_Student3 = new Student("生命在于运动","王五","17","男");        clazz2Students.add(clazz2_Student3);        Student clazz2_Student4 = new Student("生命在于运动","赵六","20","男");        clazz2Students.add(clazz2_Student4);        Student clazz2_Student5 = new Student("生命在于运动","马奇","18","女");        clazz2Students.add(clazz2_Student5);        clazz2.setStudents(clazz2Students);        mClazzs.add(clazz2);        //初始化三班        Clazz clazz3 = new Clazz("三班","201503");        List<Student> clazz3Students = new ArrayList<Student>();        Student clazz3_Student1 = new Student("生命在于运动","张三","17","男");        clazz3Students.add(clazz3_Student1);        Student clazz3_Student2 = new Student("生命在于运动","李四","19","女");        clazz3Students.add(clazz3_Student2);        Student clazz3_Student3 = new Student("生命在于运动","王五","17","男");        clazz3Students.add(clazz3_Student3);        Student clazz3_Student4 = new Student("生命在于运动","赵六","20","男");        clazz3Students.add(clazz3_Student4);        Student clazz3_Student5 = new Student("生命在于运动","马奇","18","女");        clazz3Students.add(clazz3_Student5);        clazz3.setStudents(clazz3Students);        mClazzs.add(clazz3);        //初始化四班        Clazz clazz4 = new Clazz("四班","201504");        List<Student> clazz4Students = new ArrayList<Student>();        Student clazz4_Student1 = new Student("生命在于运动","张三","17","男");        clazz4Students.add(clazz4_Student1);        Student clazz4_Student2 = new Student("生命在于运动","李四","19","女");        clazz4Students.add(clazz4_Student2);        Student clazz4_Student3 = new Student("生命在于运动","王五","17","男");        clazz4Students.add(clazz4_Student3);        Student clazz4_Student4 = new Student("生命在于运动","赵六","20","男");        clazz4Students.add(clazz4_Student4);        Student clazz4_Student5 = new Student("生命在于运动","马奇","18","女");        clazz4Students.add(clazz4_Student5);        clazz4.setStudents(clazz4Students);        mClazzs.add(clazz4);    }}

更多相关文章

  1. android 实现SSL握手协商
  2. webkit for android 4.0 by mogoweb base off Jelly
  3. [置顶] Android中的DI(依赖注入)框架--RoboGuice
  4. Fragment 的两种创建方式
  5. Android(安卓)创世纪 第一天
  6. Android(安卓)Camera CameraHal.cpp 初始化分析
  7. Android(安卓)Camera从App层到framework层到HAL层的初始化过程
  8. android Spinner控件的使用
  9. Alibaba-AndFix Bug热修复框架原理及源码解析

随机推荐

  1. android点滴5
  2. Android检测网络是否可用
  3. Android中获取网页表单中的数据
  4. FFmpeg4Android:Android摄像头直播
  5. AndroidManifest文件中android属性
  6. android:exported 属性详解
  7. Gradle DSL method not found: 'android(
  8. Android(安卓)Study ING
  9. android开启闪光灯
  10. Android中获取IMEI码