【Android笔记】 通用ListView适配器

本文记录了研读http://blog.youkuaiyun.com/lmj623565791/article/details/38902805后的笔记。对ViewHolder类做了简单修改,如重构TextView设置文字方法以传入Html格式数据,用Universal - Image - loader为ImageView设置网络图片,还给出了CommonAdapter及使用范例代码片段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来自:http://blog.youkuaiyun.com/lmj623565791/article/details/38902805 

研读使用后,此处做下笔记。

ViewHolder类有些简单修改:

1,TextView设置文字方法重构,可以传入Html格式数据;

2,ImageView设置网络图片使用Universal-Image-loader;

ViewHolder:

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;

import android.content.Context;
import android.graphics.Bitmap;
import android.text.Spanned;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

/**
 * 通用viewholder
 * 
 * @author Administrator
 * 
 */
public class ViewHolder {

	private SparseArray<View> mViews;
	private int mPosition;
	private View mConvertView;
	private ImageLoader imageLoader;
	private DisplayImageOptions options;
	private ImageLoaderConfiguration configuration;
	private Context context;

	private ViewHolder(Context context, ViewGroup parent, int layoutId,
			int position) {
		this.context = context;
		this.mPosition = position;
		this.mViews = new SparseArray<View>();
		this.mConvertView = LayoutInflater.from(context).inflate(layoutId,
				parent, false);
		mConvertView.setTag(this);
	}

	/**
	 * 拿到viewholder;
	 * 
	 * @param context
	 * @param convertView
	 * @param parent
	 * @param layoutId
	 * @param position
	 * @return
	 */
	public static ViewHolder getHolder(Context context, View convertView,
			ViewGroup parent, int layoutId, int position) {
		if (convertView == null) {
			return new ViewHolder(context, parent, layoutId, position);
		}
		return (ViewHolder) convertView.getTag();
	}

	public View getConvertView() {
		return mConvertView;
	}

	/**
	 * 通过控件的ID获取对应的控件,如果没有,则加入views
	 * 
	 * @param viewId
	 * @return
	 */
	public <T extends View> T getView(int viewId) {
		View view = mViews.get(viewId);
		if (view == null) {
			view = mConvertView.findViewById(viewId);
			mViews.put(viewId, view);
		}
		return (T) view;
	}

	/**
	 * 为adapter的item设置text
	 * 
	 * @param viewId
	 * @param text
	 * @return
	 */
	public ViewHolder setText(int viewId, String text) {
		TextView view = (TextView) getView(viewId);
		view.setText(text);
		return this;
	}

	/**
	 * 为adapter的item设置html格式的text
	 * 
	 * @param viewId
	 * @param text
	 * @return
	 */
	public ViewHolder setText(int viewId, Spanned text) {
		TextView view = (TextView) getView(viewId);
		view.setText(text);
		return this;
	}

	/**
	 * 设置本地资源图片
	 * 
	 * @param viewId
	 * @param drawableId
	 * @return
	 */
	public ViewHolder setImageResource(int viewId, int drawableId) {
		ImageView view = (ImageView) getView(viewId);
		view.setImageResource(drawableId);
		return this;
	}

	/**
	 * 设置drawable
	 * 
	 * @param viewId
	 * @param bm
	 * @return
	 */
	public ViewHolder setImageBitmap(int viewId, Bitmap bm) {
		ImageView view = (ImageView) getView(viewId);
		view.setImageBitmap(bm);
		return this;
	}

	/**
	 * 设置网络图片资源
	 * 
	 * @param viewId
	 * @param url
	 *            图片地址
	 * @param drawableId
	 *            图片加载失败时的默认图片
	 * @return
	 */
	public ViewHolder setImageByUrl(int viewId, String url, int drawableId) {
		ImageView view = (ImageView) getView(viewId);
		configuration = new ImageLoaderConfiguration.Builder(context).build();
		options = new DisplayImageOptions.Builder().showStubImage(drawableId)
				.showImageOnFail(drawableId)
				.imageScaleType(ImageScaleType.EXACTLY)
				.showImageForEmptyUri(drawableId).cacheInMemory(true)
				.cacheOnDisc(true).displayer(new FadeInBitmapDisplayer(300))
				.build();
		imageLoader = ImageLoader.getInstance();
		imageLoader.init(configuration);
		imageLoader.displayImage(url, view, options);
		return this;
	}

	public int getPosition() {
		return mPosition;
	}
}

CommonAdapter:

import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

/**
 * 通用adapter
 * 
 * @author Administrator
 * 
 */
public abstract class CommonAdapter<T> extends BaseAdapter {
	protected LayoutInflater mInflater;
	protected Context mContext;
	protected List<T> mDatas;
	protected int mItemLayoutId;

	public CommonAdapter(Context mContext, List<T> mDatas, int mItemLayoutId) {
		this.mContext = mContext;
		this.mInflater = LayoutInflater.from(mContext);
		this.mDatas = mDatas;
		this.mItemLayoutId = mItemLayoutId;
	}

	@Override
	public int getCount() {
		return mDatas.size();
	}

	@Override
	public T getItem(int position) {
		return mDatas.get(position);
	}

	@Override
	public long getItemId(int position) {
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		final ViewHolder viewHolder = getViewHolder(position, convertView,
				parent);
		convert(viewHolder, getItem(position));
		return viewHolder.getConvertView();
	}
	public abstract void convert(ViewHolder helper, T item);
	private ViewHolder getViewHolder(int position, View convertView,
			ViewGroup parent) {
		return ViewHolder.getHolder(mContext, convertView, parent,
				mItemLayoutId, position);
	}

}

使用范例代码片段:

private void inflaterAccountList(List<AccountDetailBean> list) {
		CommonAdapter<AccountDetailBean> mAdapter = new CommonAdapter<AccountDetailBean>(
				this, list, R.layout.accountitem) {
			@Override
			public void convert(ViewHolder helper, AccountDetailBean item) {
				String laiyuan = TextUtils.isEmpty(item.getSources()) ? item
						.getChanges() : item.getSources();
				String money = TextUtils.isEmpty(item.getIncome()) ? item
						.getChange_money() : item.getIncome();
				helper.setText(R.id.tv_title, "流  水  号:" + item.getId());
				if ("1".equals(item.getState())) {
					helper.setText(
							R.id.tv_account,
							Html.fromHtml(" 交易日期:" + item.getTime()
									+ "<BR/>收入来源:" + laiyuan + "<BR/>收入金额:"
									+ "<font color='#e90101'>" + money
									+ "</font>元 "));
				} else {
					helper.setText(R.id.tv_account, "交易   交易  ");
					helper.setText(
							R.id.tv_account,
							Html.fromHtml(" 交易日期:" + item.getTime()
									+ "<BR/>支出来源:" + laiyuan + "<BR/>支出金额:"
									+ "<font color='#2E618D'>" + money
									+ "</font>元 "));
				}

			}
		};
		xlistview.setAdapter(mAdapter);
		mAdapter.notifyDataSetChanged();
	}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值