Android ListView分组显示
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分组显示的更多相关文章
- 仿照支付宝账单界面--listview分组显示 用来做!发!财树充值交易明细
QQ图片20150430155638.png (151.65 KB, 下载次数: 32) 下载链接: http://pan.baidu.com/s/1kVMY1SV 密码: i8ta
- Android ListView滑动过程中图片显示重复错乱闪烁问题解决
最新内容建议直接访问原文:Android ListView滑动过程中图片显示重复错乱闪烁问题解决 主要分析Android ListView滚动过程中图片显示重复.错乱.闪烁的原因及解决方法,顺带提及L ...
- Android ListView分页加载时图片显示问题
场景:Android ListView需要分页加载,每个item中会有图片,图片又是从网络下载的. 问题:在滑动加载下一页时,上一页的图片明明已经下载完成了,但是无法显示出来. Bug重现: 1,加载 ...
- Android N(7.0) 在ListView里显示EditText时软键盘弹出时会自动切换到全键盘的问题?
Android N(7.0) 在ListView里显示EditText时软键盘弹出时会自动切换到全键盘的问题? 问题症状描述 Activity 在AndroidManifest.xml里设置andro ...
- Android ListView显示不同样式的item
先look图 我们再使用listview时,listview的item大多时候都是一种样式,在很多app中也很常见,但有时候根据需求,可能数据的数量不一样,同个类型的数据显示的位置不同,亦或者有的it ...
- [Android分享] 【转帖】Android ListView的A-Z字母排序和过滤搜索功能
感谢eoe社区的分享 最近看关于Android实现ListView的功能问题,一直都是小伙伴们关心探讨的Android开发问题之一,今天看到有关ListView实现A-Z字母排序和过滤搜索功能 ...
- android ListView优化
android ListView通过优化重用历史缓存实现.listview相应的数据适配器一般使用自己定义BaseAdapter子类,重用历史缓冲区来提高性能. 例如,下面的示例代码演示: 1.lis ...
- Anroid ListView分组和悬浮Header实现
Anroid ListView分组和悬浮Header实现 分类: Android2014-01-27 12:26 6585人阅读 评论(13) 收藏 举报 listviewheadersection分 ...
- Android listview和gridview以及view的区别
GridView 可以指定显示的条目的列数. listview一般显示的条目的列数都是一列 如果是列表(单列多行形式)的使用ListView,如果是多行多列网状形式的优先使用GridView andr ...
随机推荐
- 再次学习linux文件特殊权限:SUID、SGID、Sticy Bit
以前对于文件管理的认识只限于UGO的管理,对于特殊权限的学习还是一知半解.重新学习了一遍,我自己理解的东东记录一下. 首先,列一下SUID.SGID.Sticy Bit所代表的权限数值.就好像rwx分 ...
- solr的schema.xml配置属性解释
schema.xml做什么? SOLR加载数据,创建索引和数据时,核心数据结构的配置文件是schema.xml,该配置文件主要用于配置数据源,字段类型定义,搜索类型定义等.schema.xml的配置直 ...
- Linux中Consul集群部署
分配三台虚拟机: 192.168.5.125 192.168.5.128 192.168.5.129 在每台虚拟机上创建 /usr/consul 文件件 命令: mkdir /usr/consul ...
- nginx location 与 rewrite详解 (转)
点我
- python index()函数
python内置index()函数 index() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,该方法与 python ...
- POJ 3522 最小差值生成树(LCT)
题目大意:给出一个n个节点的图,求最大边权值减去最小边权值最小的生成树. 题解 Flash Hu大佬一如既往地强 先把边从小到大排序 然后依次加入每一条边 如果已经连通就把路径上权值最小的边删去 然后 ...
- Jupyter Notebook远程服务器配置[转]
首先要生成密码,打开python终端. In [1]: from IPython.lib import passwd In [2]: passwd() Enter password: Verify p ...
- iOS hook原理
OC中的method其实是一个结构体 struct objc_method{ SEL method_name char *method_types IMP method_imp } SEL是方法名,I ...
- js 平均分割
let alllist=res.data; var result = []; for (var i = 0; i < alllist.length; i += 3) { result.push( ...
- ubuntu 安装python3
1.安装python3 apt-get install python3 2.安装pip3 apt-get install python3-pip 3.为python3添加包 pip3 install ...