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

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. VI 命令 gg 跳到第一行,dG 删除后面的所有内容

    VI 命令 gg 跳到第一行,dG 删除后面的所有内容

  2. JAVA Socket 编程学习笔记(一)

    1. Socket 通信简介及模型 Java Socket 可实现客户端--服务器间的双向实时通信.java.net包中定义的两个类socket和ServerSocket,分别用来实现双向连接的cli ...

  3. 13,SFDC 管理员篇 - 移动客户端

    1, 自定义导航 设置导航显示内容 Setup | Mobile Administration | Salesforce Navigation   1, 可以添加和删除在mobile中显示的内容   ...

  4. 解决MD5问题

    使用VS时报错此实现不是 Windows 平台 FIPS 验证的加密算法的一部分. 解决方案如下:在window中打开功能里输入regedit,回车打开注册器.然后进入如下路径中 HKEY_LOCAL ...

  5. TCP、UDP、IP 协议分析

    http://rabbit.xttc.edu.cn/rabbit/htm/artical/201091145609.shtml  http://bhsc881114.github.io/2015/06 ...

  6. leetcode 171

    171. Excel Sheet Column Number Related to question Excel Sheet Column Title Given a column title as ...

  7. 用JS实现九九乘法表

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. arcgis中DEM如何生成等高线

    地形图指比例尺大于1∶100万的着重表示地形的普通地图(根据经纬度进行分幅,常用有1:100万,1:50万,1比25万,1:15万,1:10万,1:5万等等).由于制图的区域范围比较小,因此能比较精确 ...

  9. Maximo-获取url

    //访问报表public void OPENREPORT() throws RemoteException, MXException{ int polineid=this.getMbo().getIn ...

  10. python Tab自动补全命令设置

    Mac/Windows下需要安装模块儿 pip install pyreadline pip install rlcompleter pip install readline 注意,需要先安装pyre ...