简单代码示例:

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. mysql 存储过程的应用

    MySQL存储过程的创建   (1). 格式 MySQL存储过程创建的格式:CREATE PROCEDURE 过程名 ([过程參数[,...]]) [特性 ...] 过程体 这里先举个样例: mysq ...

  2. 我终于解决UM编辑器了 泪......

    气死我了..... 好不容易测试好了....更显得我笨了..... 原来....什么都不用改   只改了2个小位置....真的是.....回首自己 不敢看 0.0 OK  记下步骤  以免以后忘记 将 ...

  3. jQuery源码笔记——四

    each()实现 var jQuery = function( selector, context ) { return new jQuery.fn.init( selector, context ) ...

  4. ORACLE EBS R12 FOR LINUX 开机后如何启动数据库、应用脚本[Z]

    在Linux中安裝EBS  R12後, EBS關閉與啟動的程序為: 1. 關閉EBS - 先關閉Applications Server $ cd /d01/oracle/VIS/inst/apps/V ...

  5. google base库中的WaitableEvent

    这个类说白了就是对windows event的封装,没有什么特别的,常规做法,等侍另一线程无非就是等侍事件置信waitsingleobject,通知事件无非就是setevent,一看就明白,不就详解, ...

  6. Linux系统管理员不可不知的命令:sudo

    对Linux系统管理员或高级用户而言,sudo是必不可少的最重要的命令之一.当我们想要运行重要任务时,sudo提供了安全的提升权限.请耐心读本文,看看sudo能为你做些什么. sudo是个统管一切的命 ...

  7. Jexus 配置多个站点

    一:jexus配置站点的文件在 siteconf文件夹中,里面有多少个配置文件,就可以配置多少个站点 如我的里面有3个配置文件,其中default是原始文件,site1和siteconf就是我网站的配 ...

  8. OC语法8——@class关键字

    @class关键字: 在当前类中若要引用其他类的对象作成员变量(Book  *book),我们以前采用的方式是 #import "Book.h" 但 #import "B ...

  9. php代码20个实用技巧 ------ 转发自菜鸟教程

    1.不要实用相对路径 常常会看到: require_once('../../lib/some_class.php'); 该方法有很多缺点:它首先查找指定的php包含路径,然后查找当前目录,因此会检查过 ...

  10. PHP利用递归法获取多级类别的树状数组

    数据结构:category(id, pid, name),对应:信息ID,父项ID,类别名 测试数据: $aryCate = array( array('id' => 1, 'pid' => ...