ListView的实现方法也是普通的实现方法。只不过在list列表中加入groupkey信息。在渲染的时候要判断是否是分组的标题。

就是在使用不同的两个View的时候存在这种情况,convertView不为空但是由于它渲染到别的layout的关系。它里面内容的view是为空的经常会出现空指针的错误。

我这里使用了一个非常低效的方法,下次应该会改进一下。

先贴上自己实现的adapter

 import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set; import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.enick.project.base.BaseActivity;
import com.enick.project.doman.OrderAll;
import com.enick.project.doman.OrderAll.list;
import com.enick.project.ui.CH_RackingListDetailActivity;
import com.enick.project.utils.ViewUtil;
import com.enick.zdproject.R; public class ClothesGroupAdapter extends BaseAdapter { private Map<String, List<OrderAll.list>> map = new HashMap<String, List<list>>();
private List<OrderAll.list> list = new ArrayList<OrderAll.list>();
private List<OrderAll.list> temp = null;
private final static String TAG = "RZ"; public ClothesGroupAdapter(List<OrderAll.list> temp) {
this.temp = temp;
} @Override
public void notifyDataSetChanged() {
map.clear();
list.clear();
//先把数据装到map里
for (int i = 0; i < temp.size(); i++) {
if(temp.get(i) instanceof list){
List<list> tempList = map.get(temp.get(i).getItemname());
if(tempList == null){
tempList = new ArrayList<OrderAll.list>();
tempList.add(temp.get(i));
map.put(temp.get(i).getItemname(),tempList);
}else{
tempList.add(temp.get(i));
}
} }
//依据map的特性,键就是groupkey。值就是list
Set<Map.Entry<String, List<OrderAll.list>>> set = map.entrySet();
for (Iterator<Map.Entry<String, List<OrderAll.list>>> it = set
.iterator(); it.hasNext();) {
Map.Entry<String, List<OrderAll.list>> entry = (Map.Entry<String, List<OrderAll.list>>) it
.next();
OrderAll order = new OrderAll();
OrderAll.list root = order.getNewList();
root.setItemname(entry.getKey());
root.setGroupkey(true);
list.add(root);
for (int i = 0; i < entry.getValue().size(); i++) {
entry.getValue().get(i).setGroupkey(false);
list.add(entry.getValue().get(i));
}
}
super.notifyDataSetChanged();
} @Override
public int getCount() {
return list.size();
} @Override
public Object getItem(int pos) {
return list.get(pos);
} @Override
public long getItemId(int pos) {
return pos;
} @Override
public View getView(final int position, View convertView, ViewGroup parent) {
ClothesHolder clothesHolder = null;
//非常低性能的做法,每次都重新初始化
if (list.get(position).isGroupkey()) {
convertView = ViewUtil.buildView(R.layout.ch_racking_list_tag_row);
clothesHolder = new ClothesHolder();
clothesHolder.tvTagName = (TextView) convertView.findViewById(R.id.tvTagName);
String itemName = list.get(position).getItemname();
if(!ViewUtil.isStrEmpty(itemName)){
clothesHolder.tvTagName.setText(itemName);
}
}else{
convertView = ViewUtil.buildView(R.layout.ch_racking_list_row);
clothesHolder = new ClothesHolder();
clothesHolder.ivImage = (ImageView) convertView.findViewById(R.id.ivImage);
clothesHolder.tvName = (TextView) convertView.findViewById(R.id.tvName);
clothesHolder.tvWenti = (TextView) convertView.findViewById(R.id.tvWenti);
clothesHolder.tvPrice = (TextView) convertView.findViewById(R.id.tvPrice);
String subitemName = list.get(position).getSubitemname();
if (!ViewUtil.isStrEmpty(subitemName)) {
clothesHolder.tvName.setText(subitemName);
} String price = list.get(position).getPrice();
if (!ViewUtil.isStrEmpty(price)) {
clothesHolder.tvPrice.setText(price);
} String wenti = list.get(position).getWenti();
if (!ViewUtil.isStrEmpty(wenti)) {
clothesHolder.tvWenti.setText("问题!");
}
//网络加载图片,从别的服务器加载
final String url = list.get(position).getUrl();
if (!ViewUtil.isStrEmpty(url)) {
if(ViewUtil.isuploadedphoto(url)){//网络图片
final ImageView temp=clothesHolder.ivImage;
new AsyncTask<Void, Void, Bitmap>() {
protected Bitmap doInBackground(Void... p) {
return ViewUtil.getHttpBitmap(url,60,60);
}
@Override
public void onPostExecute(Bitmap result) {
super.onPostExecute(result);
temp.setImageBitmap(result);
} }.execute();
}else{
clothesHolder.ivImage.setImageBitmap(ViewUtil.extractMiniThumb(
ViewUtil.getFilePathBitmap(url), 60, 60));
}
clothesHolder.ivImage.setImageBitmap(ViewUtil.extractMiniThumb(ViewUtil
.getFilePathBitmap(url), 60, 60));
}
//添加事件
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
BaseActivity.currentActivity.startCOActivity(CH_RackingListDetailActivity.class,
OrderAll.CLOTHES_ID,list.get(position).getId());
}
});
}
return convertView;
} private class ClothesHolder {
ImageView ivImage;
TextView tvName;
TextView tvTagName;
TextView tvWenti;
TextView tvPrice; } }

acitivity只要传入数据集合就可以了

 private List<OrderAll.list> listclothes = new ArrayList<OrderAll.list>();
private ListView lvClothes;
private ClothesGroupAdapter adapter;
adapter = new ClothesGroupAdapter(listclothes);
lvClothes.setAdapter(adapter); listclothes.clear();
listclothes.addAll(OrderData.getTempOrderAll().getList());
adapter.notifyDataSetChanged();

界面效果图

Android ListView分组显示的更多相关文章

  1. 仿照支付宝账单界面--listview分组显示 用来做!发!财树充值交易明细

    QQ图片20150430155638.png (151.65 KB, 下载次数: 32)     下载链接: http://pan.baidu.com/s/1kVMY1SV 密码: i8ta

  2. Android ListView滑动过程中图片显示重复错乱闪烁问题解决

    最新内容建议直接访问原文:Android ListView滑动过程中图片显示重复错乱闪烁问题解决 主要分析Android ListView滚动过程中图片显示重复.错乱.闪烁的原因及解决方法,顺带提及L ...

  3. Android ListView分页加载时图片显示问题

    场景:Android ListView需要分页加载,每个item中会有图片,图片又是从网络下载的. 问题:在滑动加载下一页时,上一页的图片明明已经下载完成了,但是无法显示出来. Bug重现: 1,加载 ...

  4. Android N(7.0) 在ListView里显示EditText时软键盘弹出时会自动切换到全键盘的问题?

    Android N(7.0) 在ListView里显示EditText时软键盘弹出时会自动切换到全键盘的问题? 问题症状描述 Activity 在AndroidManifest.xml里设置andro ...

  5. Android ListView显示不同样式的item

    先look图 我们再使用listview时,listview的item大多时候都是一种样式,在很多app中也很常见,但有时候根据需求,可能数据的数量不一样,同个类型的数据显示的位置不同,亦或者有的it ...

  6. [Android分享] 【转帖】Android ListView的A-Z字母排序和过滤搜索功能

      感谢eoe社区的分享   最近看关于Android实现ListView的功能问题,一直都是小伙伴们关心探讨的Android开发问题之一,今天看到有关ListView实现A-Z字母排序和过滤搜索功能 ...

  7. android ListView优化

    android ListView通过优化重用历史缓存实现.listview相应的数据适配器一般使用自己定义BaseAdapter子类,重用历史缓冲区来提高性能. 例如,下面的示例代码演示: 1.lis ...

  8. Anroid ListView分组和悬浮Header实现

    Anroid ListView分组和悬浮Header实现 分类: Android2014-01-27 12:26 6585人阅读 评论(13) 收藏 举报 listviewheadersection分 ...

  9. Android listview和gridview以及view的区别

    GridView 可以指定显示的条目的列数. listview一般显示的条目的列数都是一列 如果是列表(单列多行形式)的使用ListView,如果是多行多列网状形式的优先使用GridView andr ...

随机推荐

  1. (转)@RequestParam @RequestBody @PathVariable 等参数绑定注解详解

    引言: 接上一篇文章,对@RequestMapping进行地址映射讲解之后,该篇主要讲解request 数据到handler method 参数数据的绑定所用到的注解和什么情形下使用: 简介: han ...

  2. 打开页面默认弹出软键盘,同时兼容iOS和Android

    // 示例1 open_soft_keyboard({ input: "#username" }); // 示例2 open_soft_keyboard({ input: 'inp ...

  3. Linq善解人意之通过MSDN对14个“查询关键字“逐个解剖

    linq中存在的 14个关键字 网址: https://msdn.microsoft.com/zh-cn/library/bb310804.aspx from: 迭代变量 where:对数据源进行逻辑 ...

  4. windows下gitbook与开源中国码云关联,以及如何gitbook转pdf

    gitbook能够很方便的和github关联,实现团队协作的效果.可是github私有库需要付费.但是开源中国码云能够建私有库,于是考虑将gitbook关联码云,折腾了一番后,能够可视化的关联,后面就 ...

  5. 异步编程async/await

    什么是异步? 在异步程序中,程序代码不需要按照编写时的顺序严格执行,有时需要一在一个新的线程中运行一部分代码,有时无需创建新的 线程,但是为了更好的利用单个线程的能力,需要改变代码的执行顺序. 进程 ...

  6. scrapy-redis3

    原文链接:scrapy-redis使用以及剖析

  7. kali linux之应用层Dos

    应用层服务漏洞: 服务代码存在漏洞,遇异常提交数据时程序崩溃 应用处理大量并发请求能力有限,被拒绝的是应用或OS 缓冲区溢出漏洞: 向目标函数随机提交数据,特定情况下数据覆盖临近寄存器或内存 影响:远 ...

  8. 列表的操作,元组,range; enumerate

    一.列表: 1. 什么是列表 列表是一个可变的数据类型 ,列表由[]来表示, 每一项元素使用逗号隔开. 列表什么都能装. 能装对象的对象. 列表可以装大量的数据 2. 列表的索引和切片 列表和字符串一 ...

  9. redis 3.0 集群__配置文件详解(常用配置)

    参考文档 http://www.cnblogs.com/huangjacky/p/3700473.html http://www.cnblogs.com/cxd4321/archive/2012/12 ...

  10. PHP开发微信公众号(一)二维码的获取

    要开发微信公众号,首先进行需要注册一个,然后认证.这就不用多说了. 当然如果没有,也可以去申请一个测试号来使用,地址:https://mp.weixin.qq.com/debug/cgi-bin/sa ...