android通用适配器


通用适配器构建过程:

1、将共同的重写方法放抽象类中,如下面几个方法:


@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;
	}




2、getView方法中需要用到bean对象及holderView来初始化listView内容;所以通过抽象类中定义抽象方法、暴露出方法供具体实现:




public View getView(int position, View convertView, ViewGroup parent){
		ViewHolder holder = ViewHolder.get(mContext, convertView, parent, layoutId, position);
		convert(holder,getItem(position));
		return holder.getConvertView();
	}
	public abstract void convert(ViewHolder holder,T t);


所以当我使用时、继承这个抽象类,只需要实现具体的convert方法。

@Override
	public void convert(ViewHolder holder, final Bean bean) {

		((TextView)holder.getView(R.id.id_title)).setText(bean.getTitle());
		((TextView)holder.getView(R.id.id_desc)).setText(bean.getDesc());
		((TextView)holder.getView(R.id.id_time)).setText(bean.getTime());
		((TextView)holder.getView(R.id.id_phone)).setText(bean.getPhone());
		final CheckBox checkBox = holder.getView(R.id.id_cb);
		checkBox.setChecked(bean.isChecked());
		checkBox.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				bean.setChecked(checkBox.isChecked());
			}});
	}



而ViewHolder中的作用就是构建布局并加载内容以及返回listView中具体的view:


public static ViewHolder get(Context context,View converView,ViewGroup parent,
			int layoutId,int position){
		if(converView == null){
			return new ViewHolder(context,parent,layoutId,position);
		}else{
			ViewHolder viewHolder = (ViewHolder)converView.getTag();
			viewHolder.mPosition = position;
			return viewHolder;
		}
	}
public View getConvertView() {
		return mConvertView;
	}





当然,我们还可以添加图片或请求服务器加载图片;这些方法在ViewHolder类中都有具体的实现方法。




public ViewHolder setImageBitmap(int viewId,Bitmap bitmap){
		ImageView view = getView(viewId);
		view.setImageBitmap(bitmap);
		return this;
	}
	
	public ViewHolder setImageURI(int viewId,String URL){
		ImageView view = getView(viewId);
//		Imageloader.getInstance().load(view,URL);
		return this;
	}




所以、以后在使用Adapter类时,我们只需要继承CommonAdapter类,并提供具体的实体;实现暴露给我们的抽象方法;便完成了适配器。



下面附源代码,供参考。

猜你喜欢

转载自glc.iteye.com/blog/2230988