使用expandListView做多级列表时的问题处理
来源:互联网 发布:互助保险 知乎 编辑:程序博客网 时间:2024/05/21 19:46
由于项目需要,需要在ListView的条目点击时,ExpandableListView动态的刷新,这一点,可以动态的置换数据源完成。
不过,在为ExpandableListView设置适配器的时候,适配器应当继承BaseExpandableListAdapter,这样在adapter才会有notifdatachange方法,从而实现我们的 。
但是即使如此还是会出现一个问题,虽然ExpandableListView父控件刷新了,但是子控件中的数据并没有刷新,所以需要调用以下代码进行刷新。
//关闭所有 刷新子孩子for (int i = 0, count = expandableListView.getExpandableListAdapter().getGroupCount(); i < count; i++) {//关闭view 源码里默认自动刷新evSicknessLevel2.collapseGroup(i);}
另:在改变数据源的时候,会出现ExpandableListView一级数据刷新不完全的现象,当鼠标点击时,才会刷新完毕。所以需要模拟ExpandableListView在物理上被点击。
//模拟物理点击事件,解决evSicknessLevel2 一级VIEW 不能完全刷新的问题//必须放在顶部,不然会报getParentGroup 索引越界evSicknessLevel2.performItemClick(null, 0, 0);
控制ExpandableListView只展开一个条目,就是遍历并关闭不是选定的条目。
//不需要左边的那个很丑的指示器evSicknessLevel2.setGroupIndicator(null);//此段可以控制evSicknessLevel2只展开一个条目evSicknessLevel2.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() { @Override public void onGroupExpand(int groupPosition) { for (int i = 0, count = evSicknessLevel2 .getExpandableListAdapter().getGroupCount(); i < count; i++) { if (groupPosition != i) {// 关闭其他分组 evSicknessLevel2.collapseGroup(i); } } }});//设置控件可以被点击 @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true;}
/***完整代码*/lvSicknessLevel1.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //模拟物理点击事件,解决evSicknessLevel2 一级VIEW 不能完全刷新的问题 //必须放在顶部,不然会报getParentGroup 索引越界 evSicknessLevel2.performItemClick(null, 0, 0);//设置被选中的条目 sicknessLevelOneAdapter.setCheckedPosition(position); sicknessLevelOneAdapter.notifyDataSetChanged(); //修改sicknessLevelTwoAdapter中的数据 if (sicknessLevelTwoAdapter.getSummaries() == sicknessLevelTwoAdapter.summaries1) { sicknessLevelTwoAdapter.setSummaries(sicknessLevelTwoAdapter.summaries2); sicknessLevelTwoAdapter.details = sicknessLevelTwoAdapter.details2; } else { sicknessLevelTwoAdapter.setSummaries(sicknessLevelTwoAdapter.summaries1); sicknessLevelTwoAdapter.details = sicknessLevelTwoAdapter.details1; } sicknessLevelTwoAdapter.notifyDataSetChanged(); //关闭所有 刷新子孩子 for (int i = 0, count = evSicknessLevel2 .getExpandableListAdapter().getGroupCount(); i < count; i++) { //关闭view 源码里默认自动刷新 evSicknessLevel2.collapseGroup(i); }}}); evSicknessLevel2.setAdapter(sicknessLevelTwoAdapter); //不需要左边的那个很丑的指示器 evSicknessLevel2.setGroupIndicator(null); //此段可以控制evSicknessLevel2只展开一个条目 evSicknessLevel2.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() { @Override public void onGroupExpand(int groupPosition) { for (int i = 0, count = evSicknessLevel2.getExpandableListAdapter().getGroupCount(); i < count; i++) { if (groupPosition != i) {// 关闭其他分组 evSicknessLevel2.collapseGroup(i); } } }});
0 0
- 使用expandListView做多级列表时的问题处理
- Expandlistview的使用
- ExpandListView的使用
- ExpandableListView的使用多级列表
- 使用expandlistView实现2级菜单时数据的封住问题
- 使用ExpandListView二级列表实现购物车
- 关于expandlistview的简单使用
- ExpandListView--二级列表事例
- 多级下拉列表选择处理
- ExpandListView使用自定义对象时异常
- 适配器的多级列表
- Word2010 中多级列表的设置与使用
- 关于ExpandListView实现列表搜索
- 解决 scrollview + expandlistview + gridview 点击时间失效的问题
- QQ 多级列表的实现
- 定义新的多级列表
- 多级列表的学习:ExpandableListView
- ExpandListview
- mybatis系列-Logging(七)
- mybatis 插入数据返回主键id
- 对于有多种可替代解决方案的业务逻辑,提供一种快速替换方法
- 利用JavaSwing编写一款天气数据处理器
- JavaEE – JPA(2):Spring Framework中的事务管理
- 使用expandListView做多级列表时的问题处理
- 详细解说/etc/group /etc/passwd /etc/shadow文件
- 计算机生成的精美图形,太震撼啦!!!
- jQuery的ajax操作
- Netflix为什么要采用HTML 5
- SSH框架之Hibernate的对象状态、一级缓存
- 我犯法了……^~^
- 郝斌数据结构 25 判断链表是否为空和求链表长度算法的演示
- 圈圈教你玩usb第一版硬件实物使用说明