其简单的通用适配器的定义
连接器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; } }
版权声明:本文博主原创文章,博客,未经同意不得转载。