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 ...
随机推荐
- Spring-----Spring Jar包
转载自:http://blog.csdn.net/hekewangzi/article/details/51713110
- VC/MFC使用OLE操作 EXCEL
1.VC插入sheet页到指定位置 插入sheet的函数用 sheets.Add(Before, After,Count,Type) 四个参数含义如下: 四个const VARIANT: ...
- http request parameter
http request parameter add htmlspecialchars host?vendor_id=1000000&q=Some%20children%20wish%20to ...
- Linux学习之查看远端的端口是否通畅
以80端口为例解答 法一:此法常被用来检测是个远端端口是否通畅 [root@oldboy ~]# telnet baidu.com Trying 123.125.114.144... Connecte ...
- firefox 自写扩展改版,总结
自己写的扩展,油猴功能,进一步改进,增加了许多操作.原来只是在13以下版本下面能用,主要是在13版本下面chrome代码和page下面代码能够直接互调,13版本以后就不可以了,最近考虑到新版Firef ...
- hibernate中多对多关联
hibernate中多对多关联 “计应134(实验班) 凌豪” 在关系数据库中有一种常见的关系即多对多关系,例如课程和学生的关系,一个学生可以选择多门课程,同时一门课程也可以被多个学生选择, 因此课程 ...
- IOS 访问系统粘贴板
粘贴板提供了一种核心OS特性,用于跨应用程序共享数据.用户可以跨应用来复制粘贴,也可以设置只在本应用中复制粘贴用来保护隐私. UIPasteboard类允许访问共享的设备粘贴板以及内容,下面代码返回一 ...
- 什么是JSON对象
1.什么是json? JSON全称是JavaScript Object Notation,是一种轻量级的数据交换格式.JSON 与XML具有相同的特性,是一种数据存储格式,但是JSON相比XML 更易 ...
- 简易对象垃圾回收框架 for Delphi
(一).缘起 1.1 我的一个出错程序 程序名称:呼叫处理模块的压力测试工具,分为客户端和服务端. 开发工具:Delhpi 5 相关技术:客户端通过与服务端建立Socket连接来模拟一组电话机的拨入. ...
- Android 屏幕适配方式
适配:即当前应用在相同的手机上面显示相同的效果.适配前需要首先确定当前手机所属像素密度类型(如:xhdpi.hdpi.mdpi等) 像素密度:每英寸上分布的像素点个数,单位(dpi,ppi),利用勾股 ...