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;      }   }
时间: 2024-10-06 09:29:29

ExpandableListView实现展开更多和收起更多的相关文章

javascript特效——展开选项和收起效果

1.简单的展开和收起效果: 1.1 静态结构HTML代码分析 body包含最外层的div id="pn"和按钮 a id="btn" ,而包含div id="pn"包含一个p标签和div id="hpn"(展开和收起部分) <body> <div id="pn" class="pn"> <p>分类:全部 电影 电视剧 综艺</p> <

android之ExpandableListView 无法展开

1.Button 对,没错,就是这个button组件,不知道出现都少次过问题,很多都是它造成的! 最常见的问题:ExpandableListView无法展开,OnItemClickListener不响应等问题. 解决办法:检查在getView方法中加载的视图文件,是否含有Button或者ImageButton,如果含有,把它改成TextView或者ImageView试试,可能问题就解决. 原因:布局文件的监听事件顺序是组件视图,然后才是布局文件本事,而像OnItemClickListener这样

点击更多button显示更多数据的功能实现思路代码

1 2 3 4 此功能是根据自己思路去慢慢做出来的,做的不够专业,希望有懂这个的前辈给自己指点指点. 5 6 //分界线———————————————————————————————————————————————————————————————— 7 var pageIndex = 0; //页面索引初始值 8 var pageSize = 4; //每页显示条数初始化,修改显示条数,修改这里即可 9 var pageCount; //总数据量 10 var page1; //页数 11 va

element中树形数据与懒加载实现全部展开和全部收起

element中属性懒加载数据 default-expand-all属性::是否默认展开所有行,当 Table 包含展开行存在或者为树形表格时有效 如果在表格头上加上一个按钮实现全部展开与收起 类似如图这种  默认是[全部展开]按钮,点击后,树状列表下所有数据为展示,按钮变为[全部收起]:点击[全部收起]时,树状列表下所有数据为收起状态,即返回默认状 如果动态设置控制default-expand-all树状图是不发生变化的 也就是不起作用. 解决方法:上代码: <template> <d

关于展开详情与收起

<imgng-show="colRows.HasCode"ng-click="colRows.HasCode=!colRows.HasCode;"src="assets/images/select.png"> <imgng-show="!colRows.HasCode"ng-click="colRows.HasCode=!colRows.HasCode;"src="assets/

“查看更多”--和--“点击收起”(模拟开关事件)

原理: 1.首先定义一个开关(其实就是一个标志),默认为开: 2.定义或者获取默认显示的容器(container)的高度(heightm): 3.点击按钮(#more-news-media)时,如果为"开(true)",则容器(container)的高设为自动(auto),就将显示所有,此时将开关置为"关",将按钮上的文字设为"点击收起":如果为"关(false)",则容器的高设为第二步中"定义或获取"的高

下拉刷新与上拉更多(用SwipeRefreshLayout和ListView实现)

SwipeRefreshLayout是Google在support v4 19.1版本的library更新的一个下拉刷新组件,实现刷新效果更方便. 1:在布局中添加SwipeRefreshLayout和Listview组件 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout style="@style/BaseStyle.White" xmlns:android=&quo

mui 上拉加载更多的使用

最近工作之余在用mui的框架开发,对mui了解了一些.在真正的app开发项目中,mui上拉加载模块中有两个坑,现在说一下. 1.在函数自己上拉加载行为后的回调函数 该函数是必须要写的,用来写自己的逻辑需求,但是一般情况下,需要设置显示为"加载更多"还是"没有更多数据了". 看了一些博客和官方文档,基本上都把这个设置放在了定时器中 在定时器中调用获取数据的方法(自己的业务需求) 2.在mui封装的上拉加载中,点击某一项会失效.这个是真的很坑.不过网上也有解决方法.就是

mui上拉加载更多的使用

demo地址 我的另一博客原文链接gitHub地址 mui框架中上拉加载的坑 1.在函数自己上拉加载行为后的回调函数 2.在mui封装的上拉加载中,点击某一项会失效. 解决方法 1.该函数是必须要写的,用来写自己的逻辑需求,但是一般情况下,需要设置显示为"加载更多"还是"没有更多数据了".看了一些博客和官方文档,基本上都把这个设置放在了定时器中并在定时器中调用获取数据的方法(自己的业务需求). 2.在mui封装的上拉加载中,点击某一项会失效.这个是真的很坑.就是采用