通用baseadapter之BaseListAdapter-by TomHawk

本文介绍如何在Android应用中利用BaseListAdapter简化自定义Adapter的开发过程,通过继承BaseListAdapter并重写bindView方法,实现快速创建复用性强的Adapter。同时,展示如何通过setOnInViewClickListener方法为Adapter内的View添加点击事件,提高代码复用性和功能性。

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

如果一个项目当中需要定义多个Adapter,那么重复的编写一些相同的代码无意是繁琐和浪费时间的,所以BaseListAdapter就产生了,当需要自定义Adapter的时候,让这个Adapter继承BaseListAdapter,只需覆写bindView(int position, View convertView, ViewGroup parent)方法即可,另外,可以通过setOnInViewClickListener(Integer key,onInternalClickListener onClickListener)方法来为Adapter里的view添加点击事件,当然,也可以直接通过setOnClickListener(listener)为view设置点击事件。


<span style="font-size:18px;">@SuppressLint("UseSparseArrays")
public abstract class BaseListAdapter<E> extends BaseAdapter {

	public List<E> list;

	public Context mContext;

	public LayoutInflater mInflater;

	public List<E> getList() {
		return list;
	}

	public void setList(List<E> list) {
		this.list = list;
		notifyDataSetChanged();
	}

	public void add(E e) {
		this.list.add(e);
		notifyDataSetChanged();
	}

	public void addAll(List<E> list) {
		this.list.addAll(list);
		notifyDataSetChanged();
	}

	public void remove(int position) {
		this.list.remove(position);
		notifyDataSetChanged();
	}
	
	public void clear() {
		this.list.clear();
		notifyDataSetChanged();
	}

	public BaseListAdapter(Context context, List<E> list) {
		super();
		this.mContext = context;
		this.list = list;
		mInflater = LayoutInflater.from(context);
	}

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

	@Override
	public E getItem(int position) {
		return list.get(position);
	}

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

	public View getView(int position, View convertView, ViewGroup parent) {
		convertView = bindView(position, convertView, parent);
		
		addInternalClickListener(convertView, position, list.get(position));
		return convertView;
	}

	public abstract View bindView(int position, View convertView,
			ViewGroup parent);

	public Map<Integer, onInternalClickListener> canClickItem;

	private void addInternalClickListener(final View itemV, final Integer position,final Object valuesMap) {
		if (canClickItem != null) {
			for (Integer key : canClickItem.keySet()) {
				View inView = itemV.findViewById(key);
				final onInternalClickListener inviewListener = canClickItem.get(key);
				if (inView != null && inviewListener != null) {
					inView.setOnClickListener(new OnClickListener() {

						public void onClick(View v) {
							inviewListener.OnClickListener(itemV, v, position,
									valuesMap);
						}
					});
				}
			}
		}
	}

	public void setOnInViewClickListener(Integer key,
			onInternalClickListener onClickListener) {
		if (canClickItem == null)
			canClickItem = new HashMap<Integer, onInternalClickListener>();
		canClickItem.put(key, onClickListener);
	}

	public interface onInternalClickListener {
		public void OnClickListener(View parentV, View v, Integer position,
				Object values);
	}
}</span>


示例代码:

覆写bindView(int position, View convertView, ViewGroup parent)方法

<span style="font-size:18px;">@Override
	public View bindView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		
		if(null==convertView){
			convertView=mInflater.inflate(R.layout.it_busroute,null);
		}
		TextView tv=ViewHolder.get(convertView,R.id.bue_routetime);//ViewHolder类的介绍
		Button btn=ViewHolder.get(convertView,R.id.bue_routename);
		ImageView iv=ViewHolder.get(convertView,R.id.bue_routedist);
		
		/*
		 * 通过list.getItem(position)来获取一个内容item
		 * 然后从item里取出相应内容给view设置上
		 */
		
		return convertView;
	}</span>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值