ExpandableListView实现展开更多和收起更多
【需求】:
如上面图示
当点开某个一级菜单的时候,其他菜单收起;
子级菜单默认最多5个;
多于5个的显示“展开更多”
点击“展开更多”,展开该级所有子级菜单,同时显示“收起更多”
【代码】:
@Bind(R.id.exp_listview)
ExpandableListView expListview;
adapter = new MyAdapter1(dataBeans);
expListview.setDividerHeight(0);
expListview.setChildDivider(null);
expListview.setGroupIndicator(null);//去掉ExpandableListView 默认的箭头
expListview.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long
id) {
return false;//默认为false,设为true时,点击事件不会展开Group
}
});
expListview.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
@Override
public void onGroupExpand(int groupPosition) {
adapter.setMaxIs5(true);
for (int i = 0; i < expListview.getCount(); i++) {
//expListview.expandGroup(i);
if (i != groupPosition) {
expListview.collapseGroup(i);//折叠其他
}
}
adapter.notifyDataSetChanged();
}
});
expListview.setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener() {
@Override
public void onGroupCollapse(int groupPosition) {
adapter.setMaxIs5(true);
}
});
expListview.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int
childPosition, long id) {
return false;
}
});
expListview.setAdapter(adapter);
class MyAdapter1 extends BaseExpandableListAdapter { private List<Category.DataBean> dataBeans;
private boolean maxIs5=true;//子View最多5个
private View expand_more_view;//展开更多
private View collapse_more_view;//收起更多
// private View listviewItem;//
private boolean isExpandMore=false;
private boolean isCollapseMore=false; public void setMaxIs5(boolean maxIs5) {
this.maxIs5 = maxIs5;
} public MyAdapter1(List<Category.DataBean> dataBeans1) {
this.dataBeans = dataBeans1;
expand_more_view=UIUtils.getXmlView(R.layout.category_expand_more);
collapse_more_view=UIUtils.getXmlView(R.layout.category_collapse_more);
// listviewItem=UIUtils.getXmlView(R.layout.item_category_listview_item);
} @Override
public int getGroupCount() {
return dataBeans == null ? 0 : dataBeans.size();
} @Override
public int getChildrenCount(int groupPosition) {
int size = dataBeans.get(groupPosition).getSubs().size();
int size1=Math.min(size,5);
int size2=Math.max(size,size1);
if(maxIs5){
System.out.println("【getChildrenCount】:"+groupPosition+":"+size1);
return size1;
}else{
System.out.println("【getChildrenCount】:"+groupPosition+":"+size2);
return size2;
}
} @Override
public Object getGroup(int groupPosition) {
return dataBeans.get(groupPosition);
} @Override
public Object getChild(int groupPosition, int childPosition) {
System.out.println("【getChild】:groupPosition="+groupPosition+",childPosition="+childPosition);
return dataBeans.get(groupPosition).getSubs().get(childPosition);
} @Override
public long getGroupId(int groupPosition) {
System.out.println("【getGroupId】:"+groupPosition);
return groupPosition;
} @Override
public long getChildId(int groupPosition, int childPosition) {
System.out.println("【getChildId】:groupPosition="+groupPosition+",childPosition="+childPosition);
return childPosition;
} @Override
public boolean hasStableIds() {
//组和子元素是否持有稳定的ID,也就是底层数据的改变不会影响到它们。
return true;
} @Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
ViewGroup parent) {
if (convertView == null) {
convertView = UIUtils.getXmlView(R.layout.expand_header);
}
ImageView iv_category_item = (ImageView) convertView.findViewById(R.id
.iv_category_item);
x.image().bind(iv_category_item, dataBeans.get(groupPosition).getImg());
return convertView;
}
@Override
public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View
convertView, ViewGroup parent) {
System.out.println("【getChildView】:"+childPosition);
// if (convertView == null) {
// convertView = UIUtils.getXmlView(R.layout.expand_content);
// }
// ListView lv_category_item = (ListView) convertView.findViewById(R.id.lv_category_item);
// MyAdapter2 adapter = new MyAdapter2(dataBeans.get(groupPosition).getSubs());
// lv_category_item.setAdapter(adapter);
// if (convertView == null) {
// convertView = listviewItem;
convertView = UIUtils.getXmlView(R.layout.item_category_listview_item);
// convertView= LayoutInflater.from(getActivity()).inflate(R.layout.item_category_listview_item,parent,false);
// }
TextView tv_catename = (TextView) convertView.findViewById(R.id.tv_catename);
RelativeLayout rl_category= (RelativeLayout) convertView.findViewById(R.id.rl_category);
List<Category.DataBean.SubsBean> list=dataBeans.get(groupPosition).getSubs();
final Category.DataBean.SubsBean subsBean =list.get(childPosition);
tv_catename.setText(subsBean.getCate_name());
rl_category.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
UIUtils.toast("跳转到类别:" + subsBean.getCate_name() + ",【图片url】:" + subsBean
.getImg(), false);
// if (childPosition == 4) {
// maxIs5 = false;
// YouFanApplication.mHandler.post(new Runnable() {
// @Override
// public void run() {
// notifyDataSetChanged();
// }
// });
// }
}
});
//处理“展开更多”和“收起更多”
if(list.size()>5 && isLastChild){
final LinearLayout convertView1= (LinearLayout) convertView;
if(maxIs5){//添加展开更多布局
if(isExpandMore){
//convertView1.removeView(expand_more_view);
}
ViewGroup parent1 = (ViewGroup) expand_more_view.getParent();
if(parent1!=null){
parent1.removeAllViews();
}
convertView1.addView(expand_more_view);
//The specified child already has a parent. You must call removeView() on the child's parent first.
isExpandMore=true;
}else{//添加收起更多布局
if(isCollapseMore){
//convertView1.removeView(collapse_more_view);
}
ViewGroup parent2= (ViewGroup) collapse_more_view.getParent();
if(parent2!=null){
parent2.removeAllViews();
}
convertView1.addView(collapse_more_view);
isCollapseMore=true;
} /*-------------------------------------------------------------*/
expand_more_view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
convertView1.removeView(v);
//isCollapseMore=true;
//isExpandMore=false;
maxIs5 = false;
YouFanApplication.mHandler.post(new Runnable() {
@Override
public void run() {
notifyDataSetChanged();
}
});
}
});
/*-------------------------------------------------------------*/
collapse_more_view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
convertView1.removeView(v);
//isExpandMore=true;
maxIs5 = true;
YouFanApplication.mHandler.post(new Runnable() {
@Override
public void run() {
notifyDataSetChanged();
}
});
}
});
/*-------------------------------------------------------------*/
return convertView1;
} return convertView;
} @Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
//是否选中指定位置上的子元素
return true;
}
}
ExpandableListView实现展开更多和收起更多的更多相关文章
- javascript 特效实现(1)——展开选项和收起效果
知识点:javascript事件:判断当前展开收起状态:延迟执行setTimeout方法. 1.简单的展开和收起效果: 1.1 静态结构HTML代码分析 body包含最外层的div id=" ...
- android之ExpandableListView 无法展开
1.Button 对,没错,就是这个button组件,不知道出现都少次过问题,很多都是它造成的! 最常见的问题:ExpandableListView无法展开,OnItemClickListener不响 ...
- WPF中TreeView单击展开其子元素以及点击一个元素展开其他元素收起
TreeView单击展开其子元素: 在WPF的TreeView控件中,要想展开它的子元素,我们必须要鼠标左键点两下或者右键点一下,那么我们怎样实现左键点一下就使它展开呢? Xaml: <Grid ...
- avalon.js 文字显示更多与收起
isShowMore: function (content) { if(content && content.length >= 124){ var shortContent = ...
- 点击更多button显示更多数据的功能实现思路代码
此功能是根据自己思路去慢慢做出来的,做的不够专业,希望有懂这个的前辈给自己指点指点. //分界线———————————————————————————————————————————————————— ...
- vue实现点击展开,点击收起
安装vue的步骤在这里就不进行赘述了,下面直接进入正题 首先定义一下data里面的数据: data () { return { toLearnList:[ 'html','css','javascri ...
- expandablelistView 可展开的列表
这个东西用法基本固定,不知道能不能做三级的展开. 界面代码 <?xml version="1.0" encoding="utf-8"?> <L ...
- 微信小程序——收起和查看更多功能
项目中做一些列表的时候,可能会需要做到 查看更多 及 收起功能,如下图所示: 大概的需求就是默认只显示2条,点击[查看更多]显示全部,点击[收起]还原. 实现的方法千万种.我来讲一下我的实现思路: 1 ...
- Android开发之仿微信显示更多文字的View
最近开发需求中要模仿微信朋友圈文章的展开收起功能,网上找了找,发现都有问题,于是乎自己在前辈的基础上进行了一定量的修改,下边将源码贴出来供大家参考:1.主Activity布局文件就不粘贴了,很简单,就 ...
随机推荐
- jieba.NET与Lucene.Net的集成
首先声明:我对Lucene.Net并不熟悉,但搜索确实是分词的一个重要应用,所以这里还是尝试将两者集成起来,也许对你有一参考. 看到了两个中文分词与Lucene.Net的集成项目:Lucene.Net ...
- 注册OCX失败
今天注册某个OCX时,Windows报告以下错误: 模块“XXX.ocx”已加载,但对 DllRegisterServer 的调用失败,错误代码为 0x80040200. 这是Windows权限引起的 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (8) -----第二章 实体数据建模基础之继承关系映射TPT
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 2-8 Table per Type Inheritance 建模 问题 你有这样一 ...
- iOS开发-闪退问题-解决之前上架的 App 在 iOS 9 会闪退问题
最新更新:(2015.10.02) 开发环境: Delphi 10 Seattle OS X El Capitan v10.11 需使用下列 HotfixID: 30398, PAServer Hot ...
- html 生成pdf
HTML生成PDF(c#) 最近因为工作需要,小小的研究了一下HTML生成PDF的方法,这方面的内容很多,但要么是不尽如人意的方法,要么就是那种收费的类库!为了广大.neter的福利,把自己的一点小小 ...
- 【.NET深呼吸】清理对象引用,有一个问题容易被忽略
大家知道,托管代码一个重要的特点是自动管理内存,即我们常说的垃圾回收机制,那些高大上的理论我就不重复了,有兴趣的朋友可以翻书.我这个有个毛病——不喜欢很严肃地去说一些理论的东西,所以我不多介绍了. 一 ...
- 有意思的Console
在很久的以前,因为经常在浏览器控制台调试修改数据,想到用户如果使用控制台配合抓包工具修改上下行流量中的数据,会给站点带来不定的安全威胁,所以一直想找个方法,准确的说是js的方法“禁用”控制台,也就是用 ...
- JAVA基础代码分享--学生成绩管理
问题描述: 从键盘读入学生成绩,找出最高分,并输出学生成绩等级. 成绩>=最高分-10 等级为’A’ 成绩>=最高分-20 等级为’B’ 成绩>=最高分-30 等级为’C’ ...
- android给View设置上下左右边框
给View控件设置边框,可以动态设置上下左右.通过布局文件就能搞定 1.在drawable文件夹下新建一个shape_main_list_bg.xml文件 <layer-list xmlns:a ...
- 从零开始编写自己的C#框架(4)——文档编写说明
在写本系列的过程中,了解得越多越不知道从哪里做为切入点来写,几乎每个知识点展开来说都可以写成一本书.而自己在写作与文档编写方面来说,还是一个初鸟级别,所以只能从大方面说说,在本框架开发所需的范围内来讲 ...