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. <a>标签的用法以及[@text_cut]

    <a href="${a.url}" target="_blank">[@text_cut s=a.title len=titLen append= ...

  2. MVC4 基于 Unity Ioc 框架的 ControllerFactory

    首先引入Untiy框架. 可以在NuGet程序包 管理器中直接安装. 新建 继承DefaultControllerFactory  的UnityControllerFactory: 重写虚方法GetC ...

  3. C#基础入门 四

    C#基础入门 四 方法参数 值参数:不附加任何修饰符: 输出参数:以out修饰符声明,可以返回一个或多个给调用者: 如果想要一个方法返回多个值,可以用输出参数来处理,输出参数由out关键字标识,如st ...

  4. element-ui学习

    1. 小技巧 使用导航路由 配置el-menu-item的index属性,如照片 也可使用数据动态配置导航菜单:参考 走马灯高度自适应 动态设置Carousel的height参数

  5. 通过api获取句柄控制其他窗体

    很多时候,编写程序模拟鼠标和键盘操作可以方便的实现你需要的功能,而不需要对方程序为你开放接口.比如,操作飞信定时发送短信等.我之前开发过飞信耗子,用的是对飞信协议进行抓包,然后分析协议,进而模拟协议的 ...

  6. linux安装anaconda过程

    今天在centos7下安装了Anaconda,将安装过程记录如下 下载安装Anaconda 下载地址:https://repo.continuum.io/archive/index.html 打开页面 ...

  7. 1. Python2 ,Python3区别

    Python2: 1. 源码都含有PHP,Java,C等语言的规范陋习. 2.重复代码比较多. Python3: 源码很规范,清晰,简单,符合Python的宗旨.

  8. navicat 导入txt到数据库

    一直都是建库 一条条添加数据 昨天碰上要导入一堆数据突然不知所措 查资料才弄好,先记录一下,以免忘记 这个是导入的数据名可以改 对导入数据表进行增删改 以上!

  9. Mysql数据操作《二》单表查询

    单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 关键字的执行 ...

  10. “全栈2019”Java第二十五章:流程控制语句中循环语句while

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...