抽取BaseAdapter,省代码

看着BaseAdapter,总在那里重复写,嫌烦,然后今天把BaseAdapter封装了一下

BaseAdapter.Java文件

public class CommonAdapter<T> extends BaseAdapter {

	private LayoutInflater inflater;
	private List<T> datas;
	private int layoutId;
	private int viewHolderId;

	public CommonAdapter(Context context, List<T> datas, int layoutId,
			int viewHolderId) {
		inflater = LayoutInflater.from(context);
		this.datas = datas;
		this.viewHolderId = viewHolderId;
	}

	public void resetData(List<T> datas) {
		datas.clear();
		this.datas.addAll(datas);
		this.notifyDataSetChanged();
	}

	public void addDatas(List<T> datas) {
		this.datas.addAll(datas);
		this.notifyDataSetChanged();
	}

	public void clear() {
		datas.clear();
		this.notifyDataSetChanged();
	}

	@Override
	public int getCount() {
		return datas != null ? datas.size() : 0;
	}

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

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

	@SuppressWarnings("unchecked")
	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder<T> viewHolder = null;
		if (convertView == null) {
			viewHolder = ViewHolderFactory.getViewHolder(viewHolderId);
			viewHolder.initView(convertView);
			convertView = inflater.inflate(layoutId, null);
		} else {
			viewHolder = (ViewHolder<T>) convertView.getTag();
		}
		viewHolder.loadData(convertView, position, datas.get(position));
		return convertView;
	}

}

ViewHolder.java接口

import android.view.View;

public interface ViewHolder<T> {
	public void initView(View convertView);

	public abstract void loadData(View convertView, int position, T data);
}

ViewHolderFactory.Java文件

import com.hey900.viewholder.TypeViewHolder;
import com.lidroid.xutils.util.LogUtils;

public class ViewHolderFactory {
	public final static int TPYE_VIEWHOLDER = 1;

	public static ViewHolder getViewHolder(int viewHolderId) {
		if (viewHolderId == TPYE_VIEWHOLDER) {
			return new TypeViewHolder();
		}
		LogUtils.e("亲,你要给ViewHolder啊");
		return new TypeViewHolder();
	}
}

使用的时候

public class TypeViewHolder implements ViewHolder<Type> {
	private TextView menu;

	@Override
	public void initView(View convertView) {
		menu = (TextView) convertView.findViewById(R.id.menu);
	}

	@Override
	public void loadData(View convertView, int position, Type data) {
		menu.setText(data.getName());
	}

}

adapter = new CommonAdapter<Type>(getActivity(), types,
				R.layout.type_left_menu_item, ViewHolderFactory.TPYE_VIEWHOLDER);
		menuListView.setAdapter(adapter);

但是这并不是很通用,在条目中有按钮要被按的话就不好用了,还有有多种布局是不好用。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值