ExpandableListView
2016-01-27 13:38
176 查看
基础
它本质上仍旧是ListView,只不过将item分成group和child两种(BaseAdapter.getViewTypeCount()返回的是2).之所以会出现展开效果,是因为它调用了adapter中的notifyDataSetChanged(),刷新了ListView整个条目的个数,所以整个界面便显现出展开效果了。由于它本质上是ListView,所以它的OnScrollListener#onScroll(AbsListView, int, int, int)中的第二个参数仍旧是从0开始递增。递增的过程中并不会区分这个item是group还是child类型的。
由于无论是展开还是折叠,都会调用notifyDataSetChanged(),也就会重新调用一次adapter中的getView()方法,因此可以根据BaseExpandableListAdapter.getGroupView()中的第二个参数isExpanded判断当前该group是展开还是折叠,同时更改group的样式。这也是ExpandableListView在展开和折叠之间切换图标的方法。简单示例如下:
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { if (isExpanded) { System.out.println("展开"); } else { System.out.println("折叠"); } return null; }
常用方法
getExpandableListPosition():获取该item在listview中的原始position(the raw position of an item (child or group) in the list)。由于ExpandableListView实质上仍旧是一个ListView,所以每一个item(无论是Group还是Child)在ListView中肯定有一个position,该方法返回的便是这个position。但要注意:这个position并不像我们平时写listview的adapter那样从0开始的,而是有一套自己的计算方式。当使用ExpandableListView.getPackedPositionType(),ExpandableListView.getPackedPositionChild或者ExpandableListView.getPackedPositionGroup 时,直接使用该方法的返回值当这些方法的参数。
getPackedPositionGroup():返回经过包装后的group的position,即当前的group在所有group中的第几个(从0开始)。参数是getExpandableListPosition()的返回值。
getPackedPositionChild():返回经过包装后的child的position,即在该group中该child的下标(从0开始)。如果该group中没有child或者显示的是group界面,那么返回的是-1。参数是getExpandableListPosition()的返回值。
getPackedPositionType():获取指定位置处的item的type,即是Group还是child。参数是getExpandableListPosition()的返回值。
相关文章推荐
- 杭电1015——Safecracker(dfs、递归枚举排列)
- windows Server 2008 IE增强的安全配置关闭方法
- Linux动态库的导出控制
- 高效的SQLSERVER分页查询
- Android学习笔记之文件的保存与读取
- 2468: 统计各分数段的人数
- 采购订单历史表
- 使用webview调起QQ临时会话
- java: Multiple encodings set for module chunk test "GBK" will be used by compiler
- ClassFormatError: xxx (unrecognized class file version)
- WebService服务器
- linux下iptables详细配置
- shell要点
- 虚拟机配置网卡网桥
- 尴尬的概要设计文档
- 《JAVA与模式》之门面模式
- 结合Xcode与Bitbucket进行版本管理
- 文件描述符,文件句柄的区别
- cheeck语句的使用
- iOS objc_msgSend报错问题