首先要明确,可折叠列表在每个项是包含子项的,那么肯定会用到集合嵌套!
下面是封装的两个实体类:

package com.yx.pojo;

public class Chid {

        private int img;
        private String txt;

        public int getImg() {
                return img;
        }
public void setImg(int img) {
                this.img = img;
        }
public String getTxt() {
                return txt;
        }
public void setTxt(String txt) {
                this.txt = txt;
        }

}

package com.yx.pojo;

import java.util.ArrayList;
import java.util.List;

public class Group {
        private int img;
        private String txt;
        private List<Chid> list_child = new ArrayList<Chid>();

        public List<Chid> getList_child() {
                return list_child;
        }

        public void setList_child(List<Chid> list_child) {
                this.list_child = list_child;
        }

        public int getImg() {
                return img;
        }

        public void setImg(int img) {
                this.img = img;
        }

        public String getTxt() {
                return txt;
        }

        public void setTxt(String txt) {
                this.txt = txt;
        }

}

下面,既然是适配器,那一定要有适配器组件,本次用到的是ExpandableListView ,即在布局文件中添加该控件,简单设置width height id 即可

在activity文件中,获取适配器组件并绑定适配器!

package com.yx.android_day1004;

import java.util.ArrayList;
import java.util.List;

import com.example.android_day1004.R;
import com.yx.adapter.MyExpandAdapter;
import com.yx.pojo.Chid;
import com.yx.pojo.Group;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ExpandableListView;

public class SecondActivity extends Activity {

        private static final String TAG = "tag";
        // 准备数据
        private List<Group> list_data;
        private ExpandableListView mExpandList;

        private int[] images = { R.drawable.headimage01, R.drawable.headimage02, R.drawable.headimage03 };

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_second);

                initData();
                intiView();
        }

        private void intiView() {
                mExpandList = (ExpandableListView) findViewById(R.id.expanded_list);
                MyExpandAdapter adapter = new MyExpandAdapter(this, list_data);
                mExpandList.setAdapter(adapter);
        }

        private void initData() {
                list_data = new ArrayList<Group>();
                for (int i = 0; i < 5; i++) {
                        Group group = new Group();
                        group.setImg(R.drawable.ic_launcher);
                        group.setTxt("组" + (i + 1));
                        List<Chid> child = new ArrayList<Chid>();
                        for (int j = 0; j < 3; j++) {
                                Chid chid = new Chid();
                                chid.setImg(images[j]);
                                chid.setTxt("子" + (j + 1));
                                child.add(chid);
                        }
                        group.getList_child().addAll(child);
                        list_data.add(group);
                }
        }
}

下面就是最重要的自定义适配器的部分啦。。。。。。。。。

package com.yx.adapter;

import java.util.List;

import com.example.android_day1004.R;
import com.yx.pojo.Group;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ImageView;
import android.widget.TextView;

/**
* Created by Administrator on 2016/10/4.
*/
public class MyExpandAdapter extends BaseExpandableListAdapter {
        private List<Group> list_data;
        private Context context;

        public MyExpandAdapter(Context context, List<Group> list_data) {
                this.context = context;
                this.list_data = list_data;
        }

        @Override
        public int getGroupCount() {
                return list_data.size();
        }

        @Override
        public int getChildrenCount(int groupPosition) {

                return list_data.get(groupPosition).getList_child().size();
        }

        @Override
        public Object getGroup(int groupPosition) {
                return list_data.get(groupPosition);
        }

        @Override
        public Object getChild(int groupPosition, int childPosition) {
                return list_data.get(groupPosition).getList_child().get(childPosition);
        }

        @Override
        public long getGroupId(int groupPosition) {
                return groupPosition;
        }

        @Override
        public long getChildId(int groupPosition, int childPosition) {
                return childPosition;
        }

        @Override
        public boolean hasStableIds() {
                return true;
        }

        @Override
        public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
                HolderGroup group = null;
                if (convertView == null) {
                        convertView = LayoutInflater.from(context).inflate(R.layout.activity_second_group_item, null);
                        group = new HolderGroup(convertView);
                        convertView.setTag(group);
                } else {
                        group = (HolderGroup) convertView.getTag();
                }
                group.img.setImageResource(list_data.get(groupPosition).getImg());
                group.tv.setText(list_data.get(groupPosition).getTxt());

                return convertView;
        }

        @Override
        public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView,
                        ViewGroup parent) {
                HolderChild child = null;
                if (convertView == null) {
                        convertView = LayoutInflater.from(context).inflate(R.layout.activity_second_child_item, null);
                        child = new HolderChild(convertView);
                        convertView.setTag(child);
                } else {
                        child = (HolderChild) convertView.getTag();
                }
                child.img.setImageResource(list_data.get(groupPosition).getList_child().get(childPosition).getImg());

                child.tv.setText(list_data.get(groupPosition).getList_child().get(childPosition).getTxt());

                return convertView;
        }

        @Override
        public boolean isChildSelectable(int groupPosition, int childPosition) {
                return true;
        }

        class HolderGroup {
                ImageView img;
                TextView tv;

                public HolderGroup(View convertView) {
                        img = (ImageView) convertView.findViewById(R.id.img_second_group_item);
                        tv = (TextView) convertView.findViewById(R.id.tv_second_group_item);
                }
        }

        class HolderChild {
                ImageView img;
                TextView tv;

                public HolderChild(View convertView) {
                        img = (ImageView) convertView.findViewById(R.id.img_second_child_item);
                        tv = (TextView) convertView.findViewById(R.id.tv_second_child_item);
                }
        }
}

本文中,一共有两个小细节需要注意
1、Group中的List一定要记得new出来,不然在用的时候会报空指针异常,然后又各种找不到就惨啦。。。。。
2、由于我们的ExpandableListView控件默认会在组上面加一个小箭头,记得让你的组布局项向右移一下,给它留出空间,不然不然。。丑的话自己忍。。。

en ,效果在这。。

总之,这个适配器最难的地方就是需要嵌套,保持思路清晰并不是特别难。ok

关于BaseExpandableListAdapter的更多相关文章

  1. Android ExpandableListView BaseExpandableListAdapter (类似QQ分组列表)

    分组列表视图(ExpandableListView) 和ListView不同的是它是一个两级的滚动列表视图,每一个组可以展开,显示一些子项,类似于QQ列表,这些项目来至于ExpandableListA ...

  2. Android开发之ExpandableListView扩展(BaseExpandableListAdapter的使用)(完整版)

    Android开发之ExpandableListView扩展(BaseExpandableListAdapter的使用)(完整版)

  3. android 三级菜单 BaseExpandableListAdapter

    在网上搜了非常长时间.没有找到合适的Android三级菜单.所以就自己动手写了一个,主要使用了BaseExpandableList来实现,通过三个布局文件来完毕相应的菜单项,详细实现请參照下图. wa ...

  4. [Android]BaseExpandableListAdapter实现可折叠列表

    使用BaseExpandableListAdapter 以实现的可折叠的所谓列表,例如QQ朋友们在分组功能. 基于BaseExpandableListAdapter扩大ExpandableList说明 ...

  5. Android之ExpandableList扩展用法(基于BaseExpandableListAdapter)

    1.简介 基于基于BaseExpandableListAdapter扩展的ExpandableList用法,现在网上流行的主要有两种:第一种是向BaseExpandableListAdapter传入两 ...

  6. ExpandableListView之BaseExpandableListAdapter

    之前使用的SimpleExpandableListAdapter有较大局限性,样式单一,修改难度大,这里不建议使用,而是利用BaseExpandableListAdapter,其实SimpleExpa ...

  7. Android Bug BaseExpandableListAdapter, getChildView

    @Override public View getChildView(final int groupPosition, final int childPosition, boolean isLastC ...

  8. Android中使用ExpandableListView实现微信通讯录界面(完善仿微信APP)

    之前的博文<Android中使用ExpandableListView实现好友分组>我简单介绍了使用ExpandableListView实现简单的好友分组功能,今天我们针对之前的所做的仿微信 ...

  9. Android中使用ExpandableListView实现好友分组

    一个视图显示垂直滚动两级列表中的条目.这不同于列表视图,允许两个层次,类似于QQ的好友分组.要实现这个效果的整体思路为: 1.要给ExpandableListView 设置适配器,那么必须先设置数据源 ...

随机推荐

  1. oracle 删除旧的归档文件或跟踪文件

    2016-02-16 可以使用两种方法完成删除旧文件的操作: 一.是使用find命令结合-exec rm; 二.是使用find命令结合使用xargs rm. 例如: 把5天之前的归档文件删除: [or ...

  2. sax/dom/jdom/dom4j的区别

    sax/dom/jdom/dom4j的区别[转] 博客分类: xml   网上能够查到很多的4种解析方式的区别,我再做一下摘录和总结,顺带给自己做个备份. SAX sax分析器在对xml文档进行分析时 ...

  3. NodeJs 创建 Web 服务器

    以下是演示一个最基本的 HTTP 服务器架构(使用8081端口),创建 ser.js 文件,代码如下所示: var http = require('http'); var fs = require(' ...

  4. C#小程序呢飞行棋设计分析

    C#小程序飞行棋,程序效果图 1.设计分析 这个程序界面大致分为四部分: ① 最上面游戏名字界面 ②信息提示区 ③游戏界面区 ④游戏操作提示区 2.分区设计实现 一.游戏界面显示区,由于只需要显示出图 ...

  5. LR12.53—第4课:准备Vuser脚本进行负载测试

    第4课:准备Vuser脚本进行负载测试 在前面的课程中,您确认您的Vuser脚本的回放产生了真正的用户的精确仿真.下一个步骤是准备的脚本负载测试.如何将多用户系统同时工作的工作?会拖慢系统到不可接受的 ...

  6. 官方提供的屏蔽百度转码Baidu Transcoder的方法no-transform

    首先,百度在官方的声明中说:[喝小酒的网摘]http://blog.hehehehehe.cn/a/17112.htm百度仅作为中立的转码工具及相关技术的提供方.在转码过程中,百度对第三方网站内容不做 ...

  7. UIDynamicAnimator UIKit动力学

    也许是工作上并没有这方面的需要,对UIDynamicAnimator的了解不多.这里做简单的介绍: UIKit动力学是模拟真实世界的一些特性,主要就是UIDynamicAnimator类,通过类中的不 ...

  8. windows下git识别大小写配置

    默认情况下windows上的Git客户端,在文件名仅发生大小写改变时不会识别,提交后发现,gitlab上的文件名不会发生变化. 解决方法: 编辑 .git 中的config文件, 将 ignoreca ...

  9. android开发--多线程

    android中的几种多线程实现方式: 1)Activity.runOnUiThread(Runnable) 2)View.post(Runnable) ;View.postDelay(Runnabl ...

  10. C语言dsPIC / PIC24 serial bootloader和C#语言bootloader PC端串口通信程序

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 新dsPIC/PIC2 ...