ListView 分组 显示网络数据

时间:2021-06-11 15:11:03

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

  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;
}
}