Android 自定义BaseAdapter


基本每个项目中都要用到ListView、GridView, 而如果直接使用BaseAdapter,代码量会非常多,所以写了一个封装的Adapter,大大的节省代码量

代码中已经加了注释,这里直接贴出代码:

public abstract class ListItemAdapter<T> extends BaseAdapter {
	protected Context context;
	protected List<T> myList;

	public ListItemAdapter(Context context) {
		this.context = context;
	}

	/**
	 * 得到适配器所有数据
	 * 
	 * @return
	 */
	public List<T> getList() {
		return myList;
	}

	/**
	 * 为适配器刷新数据。并且重新唤醒适配器
	 * 
	 * @param list
	 */
	public void setList(List<T> list) {
		this.myList = list;
		notifyDataSetChanged();
	}

	/**
	 * 为适配器添加一个List<T>的全部数据。并且重新唤醒适配器
	 * 
	 * @param list
	 */
	public void addList(List<T> list) {
		if (myList == null) {
			myList = new ArrayList<T>();
		}
		myList.addAll(list);// 此方法是将传进来的List<T>全部数据条目添加到myList<T>中
		notifyDataSetChanged();
	}

	/**
	 * 为适配器添加一个泛型条目T
	 * 
	 * @param t
	 */
	public void addItem(T t) {
		if (myList == null) {
			myList = new ArrayList<T>();
		}
		myList.add(t);
		notifyDataSetChanged();
	}

	/**
	 * 为适配器删除一个泛型条目T
	 * 
	 * @param t
	 */
	public void deleteItem(int position) {
		if (myList != null) {
			myList.remove(position);
			notifyDataSetChanged();
		} else {
			// 删除失败 适配器为空
		}

	}

	/**
	 * 为适配器添加一个泛型条目T
	 * 
	 * @param t
	 */
	public void changeItem(T t, int index) {
		if (myList == null) {
			myList = new ArrayList<T>();
		}
		myList.set(index, t);
		notifyDataSetChanged();
	}

	/**
	 * 判断适配器数据是否为空
	 * 
	 * @return
	 */
	public Boolean isNull() {
		return myList == null || myList.size() == 0;
	}

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

	@Override
	public Object getItem(int position) {
		return myList.get(position);
	}

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

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

}


使用的时候也是非常方便:

1.初始化ListView

ListView listView = (ListView) findViewById(R.id.lv);


2.初始化适配器

MyAdapter adapter = new MyAdapter(this);


3.绑定适配器

listView.setAdapter(adapter);

4.给适配器设置数据

adapter.setList(list);


然后MyAdapter只需要继承自定义的Adapter:


class MyAdapter extends ListItemAdapter<String>{

		public Test(Context context) {
			super(context);
			// TODO Auto-generated constructor stub
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			// TODO Auto-generated method stub
			return null;
		}
	
	}



附完整Demo:

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {

	private ListView listView;
	private MyAdapter adapter;
	private List<Bean> list = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		listView = (ListView) findViewById(R.id.lv);// 初始化ListView
		adapter = new MyAdapter(this);
		listView.setAdapter(adapter);// 绑定适配器
		list = new ArrayList<Bean>();
		for (int i = 0; i < 30; i++) {
			Bean bean = new Bean();
			bean.setName("是道德的沦丧还是人性的泯灭");
			list.add(bean);
		}
		adapter.setList(list);// 给Adapter设置数据
	}

	class MyAdapter extends ListItemAdapter<Bean> {

		public MyAdapter(Context context) {
			super(context);
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			Holder holder = null;
			if (convertView == null) {
				holder = new Holder();
				convertView = View.inflate(context, R.layout.item, null);
				holder.tv = (TextView) convertView.findViewById(R.id.tv);
				convertView.setTag(holder);
			} else {
				holder = (Holder) convertView.getTag();
			}

			final Bean bean = myList.get(position);

			holder.tv.setText(bean.getName());

			return convertView;
		}

		class Holder {
			TextView tv;
		}
	}

	class Bean {
		String name;

		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}

	}

}


最后再补充一下,如果需要做分页,第一页的数据直接adapter.setList(lsit);   第二页以后的数据直接adapter.addList(list);

下载地址:http://download.csdn.net/detail/qq_18612815/9518827



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值