简单代码示例:

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实现的更多相关文章

  1. ListView优化-通用ViewHolder编写备份

    ViewHolder.java package cn.edu.bzu.util; import android.content.Context; import android.util.SparseA ...

  2. ListView优化中ViewHolder要不要定义为static静态内部类?

    给学生讲课的时候,发现存在这个问题,下来百度了下,发现很纠结,涉及到了内部类对外部类的引用,静态类的生命周期等java知识,现总结如下: static class ViewHolder { //定义l ...

  3. ListView优化为何ViewHolder用static类(转载)

    如果有人还不了解ViewHolder为什么可以起到优化作用,我这边再做下简单说明:Android的findViewById动作是比较耗时的,需要遍历布局的树形结构,才能找到相应的视图.所以如果想在这一 ...

  4. 【转】ListView优化为何ViewHolder用static类

    如果有人还不了解ViewHolder为什么可以起到优化作用,我这边再做下简单说明:Android的findViewById动作是比较耗时的,需要遍历布局的树形结构,才能找到相应的视图.所以如果想在这一 ...

  5. ListView之多种类型Item

    一.概述 一般而言,listview每个item的样式是一样的,但也有很多应用场景下不同位置的item需要不同的样式. 拿微信举例,前者的代表作是消息列表,而后者的典型则是聊天会话界面. 本文重点介绍 ...

  6. Android之ListView性能优化——一行代码绑定数据——万能适配器

    如下图,加入现在有一个这样的需求图,你会怎么做?作为一个初学者,之前我都是直接用SimpleAdapter结合一个Item的布局来实现的,感觉这样实现起来很方便(基本上一行代码就可以实现),而且也没有 ...

  7. 关于ScrollView嵌套ListView问题

    Android开发之ScrollView中嵌套ListView的解决方案   原文:http://blog.csdn.net/minimicall/article/details/40983331   ...

  8. 转载:ViewHolder为什么声明为static

    转自:http://www.cnblogs.com/bluestorm/p/5867061.html ListView优化中ViewHolder要不要定义为static静态内部类?   给学生讲课的时 ...

  9. 四种方案解决ScrollView嵌套ListView问题(转)

    以下文章转自@安卓泡面 在工作中,曾多次碰到ScrollView嵌套ListView的问题,网上的解决方法有很多种,但是杂而不全.我试过很多种方法,它们各有利弊. 在这里我将会从使用ScrollVie ...

随机推荐

  1. 从头开始-02.C语言基础

    变量的内存分析: #include <stdio.h> int main() { //内存地址由大到小 int a=10; int b=20; //&是一个地址运算符,取得变量的地 ...

  2. bootstarp基本模板

    <!DOCTYPE html><!--html5文档格式--> <html lang="zh-CN"><!--申明语言是中文简体--> ...

  3. SSIS之Foreach循环容器用法

    要实现的业务:A数据库服务器上某库的T_GOODS_DECL的状态字段“Is_Delete”标记为“1”的时候删除B数据库服务器上对应库的T_GOODS_DECL表中的记录,二者的主键为“DECL_N ...

  4. Sql Server 2008开发版(Developer Edition)过期升级企业版(Enterprise Edition)失败后安装学习版(Express Edition)

    最近一个多月,甚是悠哉,无事可做.上线的网站系统也没接到客户的反馈,反而觉得无聊之极了.上周五早上,一上QQ,就收到客户发来消息,管理平台无法登陆了.心里一惊,立马开始查找故障原因.翻看了系统日志,提 ...

  5. QF——iOS代理模式

    iOS的代理模式: A要完成某个功能,它可以自己完成,但有时出于一些原因,不方便自己完成.这时A可以委托B来帮其完成此功能,即由B代理完成.但是这个功能不是让B随随便便任其完成.此时,会有一个协议文件 ...

  6. Ubuntu安装Mysql及使用

    (1)在线安装:sudo apt-get install mysql-server(2)管理mysql: sudo /etc/init.d/mysql start===========>开启my ...

  7. python打包成.exe工具py2exe0-----No such file or directory错误

    转自:http://justcoding.iteye.com/blog/900993 一.简介 py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具, ...

  8. group_concat 使用

    Mysql中使用group_concat时,出现Row 1 was cut by GROUP_CONCAT()异常. group_concat默认的最大拼接长度,是1024. 把所有子节点的ID,用逗 ...

  9. javascript事件小结(事件处理程序方式)--javascript高级程序设计笔记

    1.事件流:描述的是从页面中接收事件的顺序. 2.事件冒泡:IE的事件流叫做事件冒泡,即事件开始从具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到不具体的节点(文档). 3.事件捕获 ...

  10. 非数值(Not a Number)NaN的解释

    它是一个特殊的数值.它用于表示一个本来要返回数值的操作数未返回数值的情况. 在ECMAScript中,任何数值除以0会返回NaN,而不会导致错误,不会停止代码的执行,因此不会影响其他代码的执行. Na ...