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

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. autoit 将输入法修改为英文输入法

    如果能用ControlSend,就不推荐用send,如果非要用send,可以切换输入法为英文再send. $hWnd = WinGetHandle("[ACTIVE]");$hWn ...

  2. Linux常见疑难问答

    Linux常见疑难问答 (1)按a~z顺序排列启动服务进程. #exportLC_ALL=C           #英文环境变量设置,主要用于解决乱码问题 #chkconfig –list | gre ...

  3. 傻瓜式操作Nagios

    傻瓜式操作Nagios   不少接触Nagios的朋友都会觉得安装配置困难,应用在企业网中所花费的时间成本很高,下面通过OSSIM来搞定它把. 为了节省资源,首先在淘汰的机器上安装一个低版本的OSSI ...

  4. JS实现div动态水平垂直居中

    在做页面的过程中,在很多地方都会遇到元素需要水平垂直的居中这个问题,之前总是去网上搜别人的代码,今天仔细研究了一下,分享给大家,先写一个简单的例子: <div class="mui-c ...

  5. 用rpm -e 将yum命令删除了,如何修复

    系统环境: 物理机:Windows 10 家庭中文版 虚拟机:VMware Workstation 10 Linux发行版本:CentOS 6.5 相关信息查询: 首先查询,系统安装的yum包的信息: ...

  6. 一个解决adb5037端口被绑定问题的小程序-以管理员身份运行

    @echo start adb... @rem 获取绑定的进程id输出到一个临时文件 @call netstat -ano |findstr " |findstr "LISTENI ...

  7. javascript获取当前时间

    function getCurrentDate(){ var myDate = new Date(); var month = myDate.getMonth()+1; var day = myDat ...

  8. C#的自定义滚动条

    VS工具箱自带的滚动条,不能设置颜色. 在网上找资源,找到一个控制TextBox的垂直滚动条,链接为http://www.cnblogs.com/2seek/p/4455079.html 在这个的基础 ...

  9. ThinkPHP单字母函数(快捷方法)使用总结

    在ThinkPHP中有许多使用简便的单字母函数(即快捷方法),可以很方便开发者快速的调用,但是字母函数却不方便记忆,本文将所有的字母函数总结一下,以方便以后查找. 1.U() URL组装 支持不同UR ...

  10. 传说中的requestAnimFrame

    //让浏览器以10ms绘制 兼容写法                window.requestAnimFrame = (function() {                    return ...