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

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. ios录音、音频播放功能

    #import <AVFoundation/AVFoundation.h> { NSInteger   _timeCount;    NSTimer     *_timer; } @pro ...

  2. JavaScript中的分支结构

    说到JavaScript中的分支结构,我们就不得不提到流程控制这个词,我们所有的程序都是由数据和算法组成的.程序=数据+算法通常我们所说的算法都可以通过"顺序","分支& ...

  3. MongoDB学习笔记(索引)

    一.索引基础:    MongoDB的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的优化技巧.下面是创建索引的命令:    > db.test.ensureIndex({" ...

  4. linux系统下的软连接与硬链接

    前几天在linux系统下安装mongoDB,然后运行脚本导入数据的时候遇到了链接库查询不到的情况,如图 1所示.当时是通过创建软连接的方式解决的这个问题.虽然,通过网上的教程解决了这个问题,但是对于软 ...

  5. Struts2框架之-Struts2的标签

    Struts2包含哪些标签? 解答: A: <s:a href=”"></s:a>—–超链接,类似于html里的<a></a> <s:a ...

  6. Processing与Java混编初探

    Processing其实是由Java开发出的轻量级JAVA开发语言,主要用于做原型,有setup.draw两个主接口和几个消息相应接口 Processing和Java混编很简单...在Java中引入外 ...

  7. VS Code 相关

    TSLint tslint 'src/**/*.ts?(x)' 运行发现目录下所有ts文件有没有问题 VSCode 按F1 输入ext install tslint Link 有一些lint可以aut ...

  8. 学习计划-----java初级工程师

    目标: 1.具备扎实的JAVA基础,对数据结构.基本算法熟练掌握,并具备基本的算法设计能力. 2.前台:精通JSP/Servlet.HTML.JavaScript.Ajax.Jquery, XML.J ...

  9. springMVC和mybatis整合,jsp对时间进行格式化

    发现jsp显示的时间,是java Date类型的默认格式,一串鸡肠.... 可在jsp对输出进行格式化: 1.加入taglib <%@ taglib prefix="fmt" ...

  10. php的数据循环 之li的3个类判断

    这种判断必须得保证后台数据的键值为数字 ,反正要能跟数字计算的数据才行 ts2.php <?php$array = array('0'=>'a1','1'=>'b1','2'=> ...