zoukankan      html  css  js  c++  java
  • Android ExpandableGridView的实现

    近期在做项目的时候碰到了这样一个布局

     

     

     

    在android中有种实现折叠list方式是ExpandableListView  但是官方没有ExpandableGridView 

    那么怎么样用ExpandableListView来实现一个ExpandableGridView呢

     

    大概的原理是:在每个ExpandableListView 中显示一行,用这行来加载一个GridView

    口说无凭,贴上代码

    1.加载一个ExpandableListView

    private SimpleDataAdapter simpleDataAdapter;
     private ExpandableListView mexpandableListview;
    
    
    
    
            mexpandableListview = (ExpandableListView) findViewById(R.id.expandablelist);
            mSuperAdapter = new SuperveseDataExpandableAdapter(this,mSuperveseData);
            mexpandableListview.setAdapter(mSuperAdapter);
            mexpandableListview.expandGroup(0);  

      2.重写BaseExpandableListAdapter

    重写BaseExpandableListAdapter,主要是重写getChildView方法 加载一个GridView 动态的计算GridView 高度

        @Override
        public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = layoutInflater.inflate(R.layout.view, null);
            }
            CustomGridView gridView = (CustomGridView) convertView .findViewById(R.id.GridView_toolbar);
    
            gridView.setNumColumns(2);
            gridView.setHorizontalSpacing(10);
            gridView.setGravity(Gravity.CENTER);
            GridAdapter adapter = new GridAdapter(context, superveseDatas.get(groupPosition).controlDatas);
            gridView.setAdapter(adapter);// Adapter
    
            int totalHeight = 0;
           for (int size = 0; size < adapter.getCount(); size++) {
                RelativeLayout relativeLayout = (RelativeLayout) adapter.getView(size, null, gridView);
                TextView textView = (TextView) relativeLayout.getChildAt(0);
                textView.measure(0, 0);
                totalHeight += textView.getMeasuredHeight()*2;
                if(size == adapter.getCount() -1){
                    if (size%2 == 0 ){
                        totalHeight += textView.getMeasuredHeight()*2;
                    }
                }
            }
            gridView.SetHeight(totalHeight);
    
            return convertView;
        }
    

      另外一个地方也需要注意下:

    getChildrenCount返回1 因为用一个Item 来加载GridView
     @Override
        public int getChildrenCount(int groupPosition) {
            return  1;
        }
    

      

     

    最后实现的效果如下

     

     

     

  • 相关阅读:
    KVM之一:安装准备(基于CentOS6.7)
    Nginx技巧——Nginx/Apache下禁止指定目录运行PHP脚本(转自运维之美)
    (转)关于 awk 的 pattern(模式)
    form验证里使用request 和前端倒计时
    restful 在接口中获取 传过来的值
    django使用celery
    celery
    restful 在接口中获取 request.user
    码云创建一个仓库
    django中local_settings的配置
  • 原文地址:https://www.cnblogs.com/huwei0814/p/4461584.html
Copyright © 2011-2022 走看看