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; } }
时刻怀有一颗虔诚之心,乐于分享。知识才更有意义。