简单代码示例:

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. CLR via C# 阅读笔记

    1.char在C#中为16位Unicode字符:int 映射到System.Int32;long映射到System.Int64. 2.重载时C#不考虑返回值,而CLR允许返回值不同,方法名和参数相同的 ...

  2. Android快速开发不可或缺的11个工具类

     Android快速开发不可或缺的11个工具类  :http://www.devst ore.cn/code/info/363.html

  3. JavaScript习题

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  4. NULL、空指针,’\0’,0的去区别

    http://blog.csdn.net/bailyzheng/article/details/7677628参考该博客 NULL是空指针常量.

  5. struts2中使用ognl表达式时各种符号的使用规则$,#,%

    OGNL表达式struts2标签“%,#,$” 一.什么是OGNL,有什么特点? OGNL(Object-Graph Navigation Language),大概可以理解为:对象图形化导航语言.是一 ...

  6. Blast使用详解

    Blast,全称Basic Local Alignment Search Tool,即"基于局部比对算法的搜索工具",由Altschul等人于1990年发布.Blast能够实现比较 ...

  7. J2SE知识点摘记(十三)

    1.        字节流 InputStream(输入字节流)是一个定义了java流式字节流输入模式的抽象类.该类的所有方法在出错时都会引发一个IOExcepiton异常. Void close() ...

  8. 对手机SD卡的一些操作

    首先要导入外包 log4j-1.2.16.jar 代码如下: package com.car273.util; import java.io.BufferedReader; import java.i ...

  9. (7) 引用Objective-C class library

    原文 引用Objective-C class library 这个范例是如何在Xamarin.ios中去使用一个我们自行在Xcode中开发的Objective-c Class Library. 主要会 ...

  10. 记录一下八款开源 Android 游戏引擎

    记录一下八款开源 Android 游戏引擎 虽然android学了点点,然后现在又没学了(我为啥这么没有恒心呢大哭).以后有时间还是要继续学android的,一定要啊!虽然现在没学android游戏编 ...