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. 螺旋折线——第九届蓝桥杯C语言B组(省赛)第七题

    原创 如图p1.png所示的螺旋折线经过平面上所有整点恰好一次. 对于整点(X, Y),我们定义它到原点的距离dis(X, Y)是从原点到(X, Y)的螺旋折线段的长度. 例如dis(0, 1)=3, ...

  2. 基于JSP的B2C的网上拍卖系统_秒杀与竞价-JavaWeb项目-有源码

    开发工具:Myeclipse/Eclipse + MySQL + Tomcat 项目简介: 基于B2C的网上拍卖系统主要用于帮助人们应用互联网方便快捷买到自己所中意的商品,并参与到秒杀与竞拍当中.主要 ...

  3. MVVM ICommand.CanExecute parameter is null

    CommandParameter="{Binding}" 改为 CommandParameter="{Binding DataContext,RelativeSource ...

  4. onbeforeunload事件

    window.onbeforeunload=function(){ return "您正在编辑的博客尚未保存,确定要离开此页吗?"; }; 1.这个事件存在的意义就是防止用户不小心 ...

  5. C# 读Autofac源码笔记(1)

    最近在看Autofac的源码. Autofac据说是.net中最快的IOC框架,具体没有实验,于是看看Autofac具体是怎样实例化实体.   image.png 如上图所示,Autofac使用的是表 ...

  6. 网易对象存储NOS图床神器

    本文来自网易云社区 注:使用过程中有什么问题或建议欢迎到如下链接提交:http://note.youdao.com/noteshare?id=6321086fa4d7a6c003656354c1aa6 ...

  7. VSM Import Cluster功能验证二(导入篇)

    三 vsm import cluster 3.1登录vsm web UI 登陆 VSM web UI,https://172.16.34.51/dashboard/vsm/,点击Cluster Man ...

  8. Rabbitmq消息服务器通讯异常: name must not be blank

    前人挖坑,后人填! 倒霉的遇到一个破项目,该 项目使用了 RabbitMQ 消息队列向服务器发送消息, 但在发送中老是报 RabbitMQ 服务器异常! 呃,查看了服务器,服务器好好的,日志中却是这样 ...

  9. STR[#6]

    photo 小明在旅游的路上看到了一条美丽的河,河上有许多船只,有的船只向左航行,有的船只向右航行.小明希望拍下这一美丽的风景,并且把尽可能多的船只都完整地拍到一张照片中. 小明位于河的边上,并且可以 ...

  10. JOISC2019Day 1試験 (Examination)

    题面 官网 题解 就是个裸的三维数点,\(CDQ\)直接套上去就行了 //minamoto #include<bits/stdc++.h> #define R register #defi ...