标签:万能适配器
适配器在android中非常的常用,像ListView,GridView,下拉框。。。中都比较常用,
这篇博客介绍一个万能的适配器,虽然比较简单,但是用处比较大。(不用一个个再去创建适配器了)
此列子创建的是一个虚类,使用的时候需要继承此类,并实现相应的方法。
public abstract class SimpleBaseAdapter<T> extends BaseAdapter{ //调用类传入的Context Context context //需要的数据,使用泛型; List<T> data; //构造方法,传入context和数据 public SimpleBaseAdapter(Context context, List<T>data){ this.context = context; this.data = data == null ? new ArrayList<T>() : data; } @Override public int getCount() { return data.size(); } @Override public Object getItem(int position) { if(position >= data.size()) { return null; } return data.get(position); } @Override public long getItemId(int position) { return position; } //继承类所需要实现的方法,获取列表项的布局id public abstract int getItemRsouce(); //继承类所需要实现的方法,获取列表项的view public abstract View getItemView(int position,View convertView,ViewHolder holder); //适配器中最重要的方法,之所以返回view调用getItemView()这个方法 //是因为返回的view中的子view需要根据实现类中view的id确认 @SuppressWarnings("unchecked") @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if(convertView == null) { convertView = View.inflate(context, getItemRsouce(), null); holder = new ViewHolder(convertView); convertView.setTag(holder); } else{ holder = (ViewHolder) convertView.getTag(); } return getItemView(position, convertView, holder); } //一种新的ViewHolder的写法,之所以这么写,是为了方便 //实现类获取ConvertView中的子view ,HolderView的缓存机制 //使用SparseArray进行缓存 public class ViewHolder{ private SparseArray<View> views = new SparseArray<View>(); private View convertView; public ViewHolder(View convertView) { this.convertView = convertView; } @SuppressWarnings("unchecked") public <T extends View> T getView(int resId) { View v = views.get(resId); if(v == null) { v = convertView.findViewById(resId); views.put(resId, v); } return (T) v; } } }SimpleBaseAdapter其实就是对适配器的一种抽象,并且这个抽象类的不同表现用抽象方法
实现,因为实现类必须要实现抽象方法(也可以说实现类是根据抽象方法表现出不同的属性)
SimpleBaseAdapter的实现类:
public class myAdapter extends SimpleBaseAdapter<String> { public myAdapter(Context context,List<String> data){ super(context, data); } @Override public int getItemRsouce() { return R.layout.list_item; //返回次实现类的列表item的xml文件id } //根据id获取view(每个实现类的id都不一样) @Override public View getItemView(final int position, View convertView, ViewHolder holder) { TextView tv = holder.getView(R.id.title); tv.setText((String) getItem(position)); Button btn = holder.getView(R.id.btn); btn.setText("选择"); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(myAdapter.this.context, "" + position, Toast.LENGTH_SHORT).show(); } }); return convertView; } }
标签:万能适配器
原文地址:http://blog.csdn.net/superharder/article/details/41988729