Android万能适配器(二)封装Adapter

本文是上篇文字的继续,看本文前需要了解ViewHolder封装。

Android万能适配器(一)封装ViewHolder

封装Adapter

Adapter这里主要是做一个简单的封装继承BaseAdapter类会默认需要覆盖几个方法。比如getCount ,getItemID等。我们一般写的Adapter每次都会重复这几个方法,内容返回的也几乎一模一样,所以这里可以封装到父类里面。用泛型可以虚拟一个实体类,达到使用list效果。使用这个类时候 传人一个真实实体类就ok了。下面这个就是封装好后的Adapter源码了。一般希望名字为BaseAdapter为了区分和系统BaseAdapter的区别这里使用MyBaseAdapter。

public abstract class MyBaseAdapter<T> extends BaseAdapter {
	protected LayoutInflater mInflater;
	protected Context mContext;
	protected List<T> mDatas;
	protected final int mLayoutId;

	public MyBaseAdapter(Context context, List<T> mDatas, int mLayoutId) {
		mInflater = LayoutInflater.from(context);
		this.mContext = context;
		this.mDatas = mDatas;
		this.mLayoutId = mLayoutId;
	}

	@Override
	public int getCount() {
		return mDatas.size();
	}

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

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

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// 实例化一个viewHolder
		ViewHolder viewHolder = ViewHolder.get(mContext, convertView, parent,
				mLayoutId, position);
		holdItem(viewHolder, mDatas.get(position));
		return viewHolder.getConvertView();
	}

	public abstract void holdItem(ViewHolder holder, T item);
}

这里使用封装好的Adapter实现上篇文章只有一个TextView的列表适配器,源码如下

public class TestAdapter extends MyBaseAdapter<String>{

	public TestAdapter(Context context, List<String> mDatas, int mLayoutId) {
		super(context, mDatas, mLayoutId);
 	}

	@Override
	public void holdItem(ViewHolder holder, String item) {
		TextView view = holder.getView(R.id.text_title);  
         <span style="white-space:pre">	</span>view.setText(item);  
	}

}
现在的适配器看着非常简单,而且效率非常好。喜欢就赞一个吧

使用Adapter跟普通的是一样的。直接listview 设置就ok

private void initListView() {
		mListView = (ListView) findViewById(R.id.list_main);
		mAdapter = new TestAdapter(this, mDatas,R.layout.item_1);
		mListView.setAdapter(mAdapter);
	}
有兴趣学习可以加入QQ群372647271 IsCoding工作室一起探讨
 

源码下载

你可能感兴趣的:(Android万能适配器(二)封装Adapter)