Android 分组listview 简易实现方法
来源:互联网 发布:http协议 json参数 编辑:程序博客网 时间:2024/05/16 05:30
原文链接:http://codesblock.com/?p=111
在Android开发中,listview成为activity非常常用的基本组件之一,但是需求往往比较复杂,listview需要承载的数据往往有多种表现形式。
有些需求更是需要scrollview中嵌套listview才能很好的实现,但是Android并没有提供一个合理的scrollview中嵌套listview的解决方案。
在scrollview中嵌套listview会导致listview的高度无法正确计算。就算使用常用的解决方案--根据listview的内容动态设置listview的高度,仍然会导致一个最严重的问题--由于listview的touch事件被scrollview吃掉了,listview中的子view无法再重用,listview的优势荡然无存。
我通过继承了BaseAdapter实现了一个AbsGroupListAdapter,使用最简易的方法实现多分组的listview实现。使用非常简单,只要继承AbsGroupListAdapter,并重写getChildView方法,就可以实现分组显示不同的view.
class GroupAdapter extends AbsGroupAdapter {public GroupAdapter(Context context) {super(context);}@Overridepublic View getChildView(View probableView, int groupIndex, int childIndex, int position, ViewGroup parent) {switch (groupIndex) {case 0://根据组别返回不同的view,并且view可高度复用,每个组别下发的probableview类型都是相应组别的使用过的view类型TextView view = null;if (probableView != null) {view = (TextView) probableView;} else {view = new TextView(mContext);}view.setText("position:" + childIndex);return view;case 2:ImageView view2 = null;if (probableView != null) {view2 = (ImageView) probableView;} else {view2 = new ImageView(mContext);}view2.setImageResource(android.R.drawable.ic_dialog_email);return view2;case 3:Button button = null;if (probableView != null) {button = (Button) probableView;} else {button = new Button(mContext);}button.setText("button:" + childIndex);return button;default:break;}return null;}}
为listview设置这个adapter也非常简单,只需要几行代码就能实现分组功能
ListView listView = (ListView) findViewById(R.id.listview); final GroupAdapter adapter = new GroupAdapter(getApplicationContext()); adapter.bindListView(listView); //重要,为adapter绑定listview listView.setAdapter(adapter); //与普通adapter相同 adapter.addGroup(10); // add a group 增加一个组,只需要输入组的内容数量就可以添加了 final ImageView image = new ImageView(getApplicationContext()); image.setImageResource(R.drawable.image); adapter.addStableView(image); // add a view 这个方法可以添加一个固定的view,这个view不可以复用到listview中的其他内容中。 adapter.addGroup(10); // add a group adapter.addGroup(10); // add a group adapter.notifyDataSetChanged();
如图所示,此listview共分为3个组,组一是textview、组二是一张图片、组三是imageview。
源码已经上传到github中,可以随便下载源码和demo。
1 0
- Android 分组listview 简易实现方法
- Android listview实现分组
- Android Listview的分组实现
- Android ListView 分组效果实现
- android之Listview的分组实现
- android之Listview的分组实现
- Android ListView实现分组字母索引排序
- android之Listview的分组实现
- android之Listview的分组实现
- Android Listview分组特效:滑动分组标题当前固定,并随内容滑动(andrroid原生电话本实现方法)
- ListView分组方法
- ListView 分组完美实现
- ListView的分组实现
- ListView的分组实现
- ListView的分组实现
- Android ListView的分组显示,分组标题悬浮,点击查看分组的功能实现
- Android中ListView实现多级分组显示的高效实现
- Android ListView列表分组
- Ashmem 对 Android 内存分配与共享的增强
- 六要点实现Unity3D开发性能优化
- 第二章 Linux系统安装 - VMware虚拟机安装、卸载与使用
- [Python标准库]textwrap——格式化文本段落
- 对程序猿工作的一点理解
- Android 分组listview 简易实现方法
- PCA、SVD、协方差矩阵求解的关系和对比(例子说明)
- 异步block网络请求
- 在虚拟机中安装CentOS却无法上网的解决方法
- CF 335 div.2-B/606B Testing Robots(读不懂题系列)
- this指针的含义
- 10G(82599EB) 网卡测试优化(other)
- 杭电 1086 You can Solve a Geometry Problem too 判断线段是否相交.
- 堆栈、栈帧与函数调用过程分析