天天看点

android------通用ViewHolder 通用Adapter

 参考学习自慕课网:http://www.imooc.com/learn/372

觉得这种写法确实挺好的,自己也看了视频自己回忆着写了一遍。 以后也准备用这种方式啦,,,,,

android------通用ViewHolder 通用Adapter

直接贴代码吧、、、有错误的地方还望大家指出

/***
 * 通用ViewHolder类
* @ClassName: CommonViewHolder 
* @Description: TODO(这里用一句话描述这个类的作用) 
* @author qilin zhang 
* @date 2015年11月9日 上午11:40:48 
*
 */
public class CommonViewHolder {
	private SparseArray<View> mViews;
	private View convertView;

	/***
	 * 
	* <p>Title: </p> 
	* <p>Description: </p> 
	* @param context 上下文对象
	* @param layoutId layout 文件 id
	* @param parent  parent
	 */
	private CommonViewHolder(Context context, int layoutId,ViewGroup parent) {
		this.convertView = LayoutInflater.from(context).inflate(layoutId,parent, false);
		mViews = new SparseArray<View>();
		convertView.setTag(this);
	}

	/***
	 * 根据view id 获取View
	* @Title: getView 
	* @param @param viewId
	* @return T    返回类型 
	 */
	public <T extends View > T getView(int viewId) {
		View view = mViews.get(viewId);
		if (view == null) {
			view = convertView.findViewById(viewId);
			mViews.put(viewId, view);
		}
		return (T) view;
	}

	public static CommonViewHolder get(Context context, View convertView,
			int layoutID, int position, ViewGroup parent) {
		if (convertView == null) {
			return new CommonViewHolder(context, layoutID, parent);
		} else {
			CommonViewHolder holder = (CommonViewHolder) convertView.getTag();
			return holder;
		}
	}

	public View getConvertView() {
		return convertView;
	}
	
	
	public CommonViewHolder setText(int viewId,String text){
		TextView textView=getView(viewId);
		textView.setText(text);
		return this;
	}
	
}
           

通用Adapter类  

/***
 * 通用adapter
* @ClassName: CommonAdapter 
* @Description: TODO(这里用一句话描述这个类的作用) 
* @author qilin zhang 
* @date 2015年11月9日 上午11:55:07 
* 
* @param <T>
 */
public abstract class CommonAdapter <T> extends BaseAdapter {
	private List<T> mData;
	private Context context;
	private int  layoutId;
	public CommonAdapter(Context context, List<T> bean,int layoutId) {
		// TODO Auto-generated constructor stub
		this.context = context;
		this.mData = bean;
		this.layoutId = layoutId;
	}

	@Override
	public int getCount() {
		if(mData == null || mData.size() <= 0) return 0;
		return mData.size();
	}

	@Override
	public T getItem(int position) {
		// TODO Auto-generated method stub
		return mData.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		CommonViewHolder holder = CommonViewHolder.get(context, convertView,layoutId, position, parent);
		setItemValue(holder, getItem(position));
		return holder.getConvertView();
	}
	
	/***
	 * 
	* @Title: setItemValue 
	* @Description: TODO(设置每个item内容) 
	 */
	public abstract void setItemValue(CommonViewHolder holder,T t);
	
}
           

使用方法 

public class MyAdapter2 extends CommonAdapter<Bean> {

	public MyAdapter2(Context context, List<Bean> bean, int layoutId) {
		super(context, bean, layoutId);
	}

	@Override
	public void setItemValue(CommonViewHolder holder, Bean t) {
		
		holder.setText(R.id.title, t.getTitle())
		.setText(R.id.time, t.getTime())
		.setText(R.id.desc, t.getDesc())
		.setText(R.id.info, t.getInfo());
		
	}

}
           

嘿嘿  使用起来是不是很简单  so easy   可以根据自己需求完善适配器或完善ViewHolder类。 给自己带来更多方便。  也要学会举一反三啦。。

最后贴个我的源代码吧。。

http://download.csdn.net/detail/xiaxiayige/9254215

有兴趣的可以下载看看。