通用Adapter与ListView滚动时不加载图片的封装
来源:程序员人生 发布时间:2015-06-12 08:07:10 阅读次数:2748次
本文原创,转载请注明链接:http://blog.kymjs.com/
在Android开发中写Adapter是1件非常麻烦的事情,枯燥重复,却又不能不去做。 对Adapter1般都继承BaseAdapter复写几个方法,getView里面使用ViewHolder存储,其实大部份的代码都是类似的。那末本文就带大家1起做1次将Adapter封装成1个通用的Adapter。
关于本文的完全Demo,可以参考KJFrameForAndroid开发框架2.2版本中封装的实例,KJAdapter和AdapterHolder这两个类。
那末接下来我们进入正文,下面这个类似的代码应当是我们看的最多的:
public class EmojiGridAdapter extends BaseAdapter {
private List<Emojicon> datas;
private final Context cxt;
public EmojiGridAdapter(Context cxt, List<Emojicon> datas) {
this.cxt = cxt;
if (datas == null) {
datas = new ArrayList<Emojicon>(0);
}
this.datas = datas;
}
public void refresh(List<Emojicon> datas) {
if (datas == null) {
datas = new ArrayList<Emojicon>(0);
}
this.datas = datas;
notifyDataSetChanged();
}
@Override
public int getCount() {
return datas.size();
}
@Override
public Object getItem(int position) {
return datas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
private static class ViewHolder {
ImageView image;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
......
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.image.setImageResource(datas.get(position).getResId());
return convertView;
}}
初步抽取
其中BaseAdapter的4个方法必须写,但是基本上前3个都是1模1样的, 所以可使用泛型,写1个基类出来,把数据封装到基类里面,只需要构造方法传入就好了
public class KJBaseAdapter<T> extends BaseAdapter {
List<T> datas;
KJBaseAdapter(Context cxt,List<T> datas){
......
}
@Override
public int getCount() {
return datas.size();
}
@Override
public Object getItem(int position) {
return datas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}}
然后是我们唯1需要动脑的getView()方法,首先是判断converView是不是空,然后载入item布局,然后ViewHolder挨个初始化控件,然后通过tag保存holder,最后设置View的显示。
步
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠