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 ...
随机推荐
- [转载].NET Web开发技术(补充)
大家在工作应该养成善于总结的习惯,总结你所学习.使用的技术,总结你所工作事项的比较好的地方,善于总结不断的沉淀优化自己.适时停下来总结下过去走过的路,才能让我们的未来走的更坚定.文章转自JamesLi ...
- js常用的校验代码 (整理)
/* 用途:检查输入手机号码是否正确 输入:str:字符串 返回:如果通过验证返回true,否则返回false */ function checkMobile(str){ var regu =/^[1 ...
- 如何在VMware Workstation11的Windows Server 2008 R2中安装XAMPP?
我在VMware Workstation11的Windows Server 2008 R2打算安装XAMPP,但是总是有问题,经过两天的不懈努力,终于实现了,下面我具体说一说我遇到的问题和解决方法! ...
- todolist作业涉及知识点
window.event对象详细介绍 1.event代表事件的状态,例如触发event对象的元素.鼠标的位置及状态.按下的键等等.event对象只在事件发生的过程中才有效.event的某些属性只对特定 ...
- 在Python程序中调用Java代码的实现
<原创不易,转载请标明出处:https://www.cnblogs.com/bandaobudaoweng/p/10785766.html> 前言 开发Python程序,需求中需要用到Ja ...
- (1)python的基础认知
Python程序员的信仰:人生苦短,我用python! (一)python的发展史 1989年开发的语言,创始人范罗苏姆(Guido van Rossum),别称:龟叔(Guido).为了打发圣诞节假 ...
- SFML从入门到放弃(1) 窗口和交互
SFML从入门到放弃(1) 窗口和交互 创建一个新窗口: sf::RenderWindow window(sf::VideoMode(,),"new window"); 但是光创建 ...
- PHP实现用户在线状态检测
这个是基于ThinkPHP框架的,其他的可以自己根据需求改 1.先新建一个tags.php文件,放在配置目录Conf下. <?php /* * 添加行为 * */ return arr ...
- CocoaPods的PodSpec.json文件用法
最近有时候用最新的CocoaPod的第三方库,有时候发现CocoaPod.org能搜到那个Podfile,但是每次在终端Pod search xxx,每次都搜不到,原来是本地的Podspec没用更新, ...
- restful api上传文件(基础)-springboot
基于restful api格式的文件上传(只是上传到本地): package com.nxz.controller; import com.nxz.entity.FileInfo; import or ...