ListView 分组 显示网络数据

最近项目中需要使用到 分组展示数据的形式,借鉴了网上前辈们的 精华,现写一点总结,留作个人查看。

  1. 首先 为了给ListView 中填充数据定义 List<BaseInfo> datas  = new ArrayList<BaseInfo>();

  2. BaseInfo 中首先需要定义一个className 来区别 类别,以便进行展示

  3. 在每组 数据存放之前,先往datas 中存放一个  只有 className 不为空的 BaseInfo对象,然后再把该组数据存放到datas中

  4. 然后按照 Adapter 填充数据的形式进行填充数据

  5. 在 Adapter 中需要 针对 只有 className 不为空的BaseInfo 对象,引入相应的布局文件

    以上即为 ListView 分组的逻辑思路

以下为个人使用部分代码:

Activity中的 数据处理 代码:


                               JSONArray array_obj = response
                                        .getJSONArray("obj");
                                for (int i = 0; i < array_obj.length(); i++) {
                                    JSONObject obj = array_obj.getJSONObject(i);
                                    String className = obj.getString("name");
                                    String classId = obj.getString("id");
 
                                    JSONArray array = obj
                                            .getJSONArray("appProductClientDTOList");
                                    if (array.length() == 0) {
                                        // do nothing
                                    } else {
                                        BaseInfo base = new BaseInfo();
                                        base.setClassName(className);
                                        base.setClassId(classId);
                                        datas.add(base);
                                        for (int j = 0; j < array.length(); j++) {
                                            BaseInfo baseInfo = new BaseInfo();
                                               // 数据获取
                                            baseInfo.setClassName(className);
                                            baseInfo.setClassId(classId);
                                            baseInfo.setScale(scale);
                                            baseInfo.setAppId(appId);
                                            baseInfo.setDownloadNumber(downloadCounts);
                                            baseInfo.setVersionCode(Integer
                                                    .parseInt(versionCode));
                                            baseInfo.setSize(appSize);
                                            baseInfo.setDownloadUrl(appFilePath);
                                            baseInfo.setPackageName(packageName);
                                            baseInfo.setName(name);
                                            datas.add(baseInfo);
                                        }
                                    }
                                }

 数据填充完毕后 填充Adapter :

adapter = new SplitClassAdapter(getApplicationContext(), datas);
                        adapter.notifyDataSetChanged();
                        list_classes.setAdapter(adapter);

Adapter中 处理逻辑:

 
 if (mDatas.get(position).getName()==null) {
               views = LayoutInflater.from(mcontext).inflate(R.layout.activity_header, group,false);
               header = new ViewHolderHeader();
               // ViewHolderHeader 的 组件初始化,若有处理事件,也相应的在此实现 。
         }else{
               views = LayoutInflater.from(mcontext).inflate(R.layout.item_class, group,false);
               content = new ViewHolderContent();
               //ViewHolderContent 的组件初始化,若有处理事件,也相应在此实现。

另外需要在Adapter 中 implement areAllItemsEnabled和 isEnabled 两个方法

 @Override  
     public boolean areAllItemsEnabled() {  
         return true;   
     }  
 
     @Override  
     public boolean isEnabled(int position) {  
         // 如果-开头,则该项不可选   
         BaseInfo baseInfo = mDatas.get(position);
         if (baseInfo.getName()==null) {
            return false;
        }else{
            return true;
        }
     }



posted @ 2015-08-28 16:34  CrazyMax  阅读(327)  评论(0编辑  收藏  举报