Listview 多个ViewHolder实现
简单代码示例:
package com.edaixi.adapter; import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.edaixi.activity.R;
import com.edaixi.dataset.MyAddressDataSet; public class SelectAddressListAdapter extends BasicAdapter {
private MyAddressDataSet mTrueDataSet = null;
private MyAddressDataSet mFalseDataSet = null;
private Context context;
public static int TRUE_TITLE = 1;
public static int TRUE_ITEM = 2; public SelectAddressListAdapter(Context mContext,
MyAddressDataSet mTrueDataSet, MyAddressDataSet mFalseDataSet) {
super(mContext);
this.mTrueDataSet = mTrueDataSet;
this.mFalseDataSet = mFalseDataSet;
this.context = mContext;
} @Override
public int getCount() {
if (mTrueDataSet.size() > 0 && mFalseDataSet.size() > 0) {
return mTrueDataSet.size() + mFalseDataSet.size() + 2;
} else if (mTrueDataSet.size() == 0 && mFalseDataSet.size() == 0) {
return mTrueDataSet.size() + mFalseDataSet.size();
} else {
return mTrueDataSet.size() + mFalseDataSet.size() + 1;
}
} @Override
public Object getItem(int position) {
if (position == 0) {
return null;
} else if (position < mTrueDataSet.size() + 1) {
return mTrueDataSet.getIndexBean(position);
} else {
return mFalseDataSet.getIndexBean(position - mTrueDataSet.size()
- 2);
}
} @Override
public long getItemId(int position) {
return position;
} @Override
public int getItemViewType(int position) { if ((mTrueDataSet.size() > 0) && (position == 0)) {
return TRUE_TITLE;
} else if ((mFalseDataSet.size() > 0)
&& (position == mTrueDataSet.size() + 1)) {
return TRUE_TITLE;
} else {
return TRUE_ITEM;
}
} @Override
public int getViewTypeCount() {
return 3;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolderItem mViewHolder = null;
ViewHolderTitle mViewHolderTitle = null;
final int _position = position;
int viewType = getItemViewType(position);
if (convertView == null) {
if (viewType == 2) {
mViewHolder = new ViewHolderItem();
convertView = View.inflate(context,
R.layout.item_address_select, null);
mViewHolder.mName = (TextView) convertView
.findViewById(R.id.address_item_name);
mViewHolder.mPhone = (TextView) convertView
.findViewById(R.id.address_item_tel);
mViewHolder.mDetailAdd = (TextView) convertView
.findViewById(R.id.address_item_text);
mViewHolder.mAddLayout = (RelativeLayout) convertView
.findViewById(R.id.rl_address_select);
convertView.setTag(mViewHolder);
} else {
mViewHolderTitle = new ViewHolderTitle();
convertView = View.inflate(context,
R.layout.address_select_true_tips_title, null);
mViewHolderTitle.mTitleName = (TextView) convertView
.findViewById(R.id.tv_address_title);
convertView.setTag(mViewHolderTitle);
}
} else {
if (viewType == 2) {
mViewHolder = (ViewHolderItem) convertView.getTag();
} else {
mViewHolderTitle = (ViewHolderTitle) convertView.getTag();
}
} if ((mTrueDataSet.size() > 0) && (position == 0)) {
mViewHolderTitle.mTitleName.setText("可用地址");
} else if ((mFalseDataSet.size() > 0)
&& (position == mTrueDataSet.size() + 1)) {
mViewHolderTitle.mTitleName.setText("不可用地址");
} else {
if (position <= mTrueDataSet.size()) {
mViewHolder.mAddLayout.setBackgroundColor(context
.getResources().getColor(R.color.white));
mViewHolder.mName.setTextColor(context.getResources().getColor(
R.color.text_1));
mViewHolder.mName.setText(mTrueDataSet.getIndexBean(
_position - 1).getUsername()); if (mTrueDataSet.getIndexBean(_position - 1).getTel() != null) {
mViewHolder.mPhone.setTextColor(context.getResources()
.getColor(R.color.text_1));
mViewHolder.mPhone.setText(mTrueDataSet.getIndexBean(
_position - 1).getTel());
}
mViewHolder.mDetailAdd.setTextColor(context.getResources()
.getColor(R.color.text_1));
if (mTrueDataSet.getIndexBean(_position - 1).getAddress() != null)
mViewHolder.mDetailAdd.setText(mTrueDataSet.getIndexBean(
_position - 1).getCity()
+ mTrueDataSet.getIndexBean(_position - 1)
.getArea()
+ mTrueDataSet.getIndexBean(_position - 1)
.getAddress().trim()); } else {
mViewHolder.mAddLayout.setBackgroundColor(context
.getResources().getColor(R.color.gray));
mViewHolder.mName.setTextColor(context.getResources().getColor(
R.color.falseaddress));
mViewHolder.mName.setText(mFalseDataSet.getIndexBean(
position - mTrueDataSet.size() - 2).getUsername()); if (mFalseDataSet.getIndexBean(
position - mTrueDataSet.size() - 2).getTel() != null) {
mViewHolder.mPhone.setTextColor(context.getResources()
.getColor(R.color.falseaddress));
mViewHolder.mPhone.setText(mFalseDataSet.getIndexBean(
position - mTrueDataSet.size() - 2).getTel());
}
mViewHolder.mDetailAdd.setTextColor(context.getResources()
.getColor(R.color.falseaddress));
if (mTrueDataSet.getIndexBean(
_position - mTrueDataSet.size() - 2).getAddress() != null)
mViewHolder.mDetailAdd.setText(mFalseDataSet.getIndexBean(
position - mTrueDataSet.size() - 2).getCity()
+ mFalseDataSet.getIndexBean(
position - mTrueDataSet.size() - 2)
.getArea()
+ mFalseDataSet
.getIndexBean(
position - mTrueDataSet.size() - 2)
.getAddress().trim());
}
}
return convertView;
} private static class ViewHolderItem {
private TextView mName;
private TextView mPhone;
private TextView mDetailAdd;
private RelativeLayout mAddLayout;
} private static class ViewHolderTitle {
private TextView mTitleName;
}
}
Listview 多个ViewHolder实现的更多相关文章
- ListView优化-通用ViewHolder编写备份
ViewHolder.java package cn.edu.bzu.util; import android.content.Context; import android.util.SparseA ...
- ListView优化中ViewHolder要不要定义为static静态内部类?
给学生讲课的时候,发现存在这个问题,下来百度了下,发现很纠结,涉及到了内部类对外部类的引用,静态类的生命周期等java知识,现总结如下: static class ViewHolder { //定义l ...
- ListView优化为何ViewHolder用static类(转载)
如果有人还不了解ViewHolder为什么可以起到优化作用,我这边再做下简单说明:Android的findViewById动作是比较耗时的,需要遍历布局的树形结构,才能找到相应的视图.所以如果想在这一 ...
- 【转】ListView优化为何ViewHolder用static类
如果有人还不了解ViewHolder为什么可以起到优化作用,我这边再做下简单说明:Android的findViewById动作是比较耗时的,需要遍历布局的树形结构,才能找到相应的视图.所以如果想在这一 ...
- ListView之多种类型Item
一.概述 一般而言,listview每个item的样式是一样的,但也有很多应用场景下不同位置的item需要不同的样式. 拿微信举例,前者的代表作是消息列表,而后者的典型则是聊天会话界面. 本文重点介绍 ...
- Android之ListView性能优化——一行代码绑定数据——万能适配器
如下图,加入现在有一个这样的需求图,你会怎么做?作为一个初学者,之前我都是直接用SimpleAdapter结合一个Item的布局来实现的,感觉这样实现起来很方便(基本上一行代码就可以实现),而且也没有 ...
- 关于ScrollView嵌套ListView问题
Android开发之ScrollView中嵌套ListView的解决方案 原文:http://blog.csdn.net/minimicall/article/details/40983331 ...
- 转载:ViewHolder为什么声明为static
转自:http://www.cnblogs.com/bluestorm/p/5867061.html ListView优化中ViewHolder要不要定义为static静态内部类? 给学生讲课的时 ...
- 四种方案解决ScrollView嵌套ListView问题(转)
以下文章转自@安卓泡面 在工作中,曾多次碰到ScrollView嵌套ListView的问题,网上的解决方法有很多种,但是杂而不全.我试过很多种方法,它们各有利弊. 在这里我将会从使用ScrollVie ...
随机推荐
- java 获取两个日期相差的毫秒数
方法一可以使用date的getTime()方法来将当前日期格式的时间转换为毫秒数,进而相减. long systime = new Date().getTime();//当前系统时间 l ...
- SqlServer2008 数据库同步的两种方式(Sql JOB)
尊重原著作:本文转载自http://www.cnblogs.com/tyb1222/archive/2011/05/27/2060075.html 数据库同步是一种比较常用的功能.下面介绍的就是数据库 ...
- WindowsService服务的C#实现
WindowsService(简称服务,下同)是目前做客户端软件后台运行功能的非常好的选择,本文基本解决了服务的创建和编写,代码控制服务的安装.卸载.启动.停止等,为服务传递参数,其他注意事项等 1. ...
- mac终端下svn常用命令
svn基本的操作流程就是: 你刚刚进入一个新的公司,让你接手一个正在进行的项目,你打开终端写下了:svn co svn://192.168.1.1/pro/domain 然后就可以在当前目录里面找到一 ...
- C# DataTable 详解
添加引用 using System.Data; 创建表 //创建一个空表 DataTable dt = new DataTable(); //创建一个名为"Table_New"的空 ...
- Javaweb整合mongo和kettle6.0的环境配置
为了编译能通过,maven需要加入仓库地址以及一些必须要的包的依赖情况: pentaho中央仓库: 在properties里面配置版本号: <kettle.version>6.0.0.0- ...
- xsqlbuilder使用说明
动态构造sql的利器:rapid-xsqlbuider详细说明 特性列表: 动态构造sql条件语句,提供sql拼接与使用占位符两种方式 数据类型的修饰 对SQL注入攻击的防范 问题: 手工构造SQL语 ...
- Storm并发度和Grouping方式
Storm并发度和Grouping方式 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans ...
- Js把URL中的参数解析为一个对象
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8" /> <title&g ...
- 搜索服务器xunsearch实现
安装方法: centos 6.6 64位 histroy: 12 cd /srv/ 13 wget http://www.xunsearch.com/download/xunsea ...