参考学习自慕课网:http://www.imooc.com/learn/372
觉得这种写法确实挺好的,自己也看了视频自己回忆着写了一遍。 以后也准备用这种方式啦,,,,,
直接贴代码吧、、、有错误的地方还望大家指出
/***
* 通用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
有兴趣的可以下载看看。