关于BaseExpandableListAdapter
首先要明确,可折叠列表在每个项是包含子项的,那么肯定会用到集合嵌套!
下面是封装的两个实体类:
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的更多相关文章
- Android ExpandableListView BaseExpandableListAdapter (类似QQ分组列表)
分组列表视图(ExpandableListView) 和ListView不同的是它是一个两级的滚动列表视图,每一个组可以展开,显示一些子项,类似于QQ列表,这些项目来至于ExpandableListA ...
- Android开发之ExpandableListView扩展(BaseExpandableListAdapter的使用)(完整版)
Android开发之ExpandableListView扩展(BaseExpandableListAdapter的使用)(完整版)
- android 三级菜单 BaseExpandableListAdapter
在网上搜了非常长时间.没有找到合适的Android三级菜单.所以就自己动手写了一个,主要使用了BaseExpandableList来实现,通过三个布局文件来完毕相应的菜单项,详细实现请參照下图. wa ...
- [Android]BaseExpandableListAdapter实现可折叠列表
使用BaseExpandableListAdapter 以实现的可折叠的所谓列表,例如QQ朋友们在分组功能. 基于BaseExpandableListAdapter扩大ExpandableList说明 ...
- Android之ExpandableList扩展用法(基于BaseExpandableListAdapter)
1.简介 基于基于BaseExpandableListAdapter扩展的ExpandableList用法,现在网上流行的主要有两种:第一种是向BaseExpandableListAdapter传入两 ...
- ExpandableListView之BaseExpandableListAdapter
之前使用的SimpleExpandableListAdapter有较大局限性,样式单一,修改难度大,这里不建议使用,而是利用BaseExpandableListAdapter,其实SimpleExpa ...
- Android Bug BaseExpandableListAdapter, getChildView
@Override public View getChildView(final int groupPosition, final int childPosition, boolean isLastC ...
- Android中使用ExpandableListView实现微信通讯录界面(完善仿微信APP)
之前的博文<Android中使用ExpandableListView实现好友分组>我简单介绍了使用ExpandableListView实现简单的好友分组功能,今天我们针对之前的所做的仿微信 ...
- Android中使用ExpandableListView实现好友分组
一个视图显示垂直滚动两级列表中的条目.这不同于列表视图,允许两个层次,类似于QQ的好友分组.要实现这个效果的整体思路为: 1.要给ExpandableListView 设置适配器,那么必须先设置数据源 ...
随机推荐
- 登录式与非登录式&交互式与非交互式shell及其环境初始化过程
交互式shell和非交互式shell(interactive shell and non-interactive shell) 交互式模式就是在终端上执行,shell等待你的输入,并且立即执行你提交的 ...
- linux yum 命令
linux yum 命令 yum( Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器. 基於RPM包管理,能够从指 ...
- 2016-10-17: source insight插件
使用快捷键注释,单行注释,多行注释,#if 0注释 将文件 mycomment.em点此下载放到sourceinsight的Base工程的路径下(一般是在C:\Documents and Settin ...
- FlASK中的endpoint问题
先贴一点有关的flask代码,时间有限,我慢慢扩充 以下是flask源码中app.py中add_url_rule的代码. 主要是view_func -- endpoint -- url 之间的对应关 ...
- 用jquery解析JSON数据的方法以及字符串转换成json的3种方法
用jquery解析JSON数据的方法,作为jquery异步请求的传输对象,jquery请求后返回的结果是 json对象,这里考虑的都是服务器返回JSON形式的字符串的形式,对于利用JSONObject ...
- 关于ddpush推动实现抖动视频的使用
/** //开机之后打开服务 开机成功打开服务ddpushService**/ <!-- 开机广播 --> <receiver android:name="com.r ...
- web学习笔记
最近把web方面的学习笔记都放在了github的一个仓库里,这是链接:https://github.com/williamking/web-studying-note
- cmd中用PING命令时,出现'Ping' 不是内部或外部命令 解决方案
在cmd中用PING命令时,出现'Ping' 不是内部或外部命令,也不是可运行的程序或批处理文件.先了解一下内容:1.可执行文件.命令文件和批处理文件以.exe或者.com或者.bat为扩展名的文件分 ...
- DICOM图像像素值(灰度值)转换为CT值
CT值的单位是Hounsfield,简称为Hu,范围是-1024-3071.用于衡量人体组织对X射线的吸收率,设定水的吸收率为0Hu. 在DICOM图像读取的过程中,我们会发现图像的像素值有可能不是这 ...
- 关于安卓开发当中通过java自带的HttpURLConnection访问XML的java.io.EOFException问题
刚接触安卓开发,试着写个小程序熟悉下,就写了天气预报的小程序,通过httpUrlConnection读流的方式来获取网络公共接口提供的天气XML信息.但在建立http连接时一直报java.io.EOF ...