通用Adapter與ListView滾動時不加載圖片的封裝
來源:程序員人生 發(fā)布時間:2015-06-12 08:07:10 閱讀次數:2924次
本文原創(chuàng),轉載請注明鏈接:http://blog.kymjs.com/
在Android開發(fā)中寫Adapter是1件非常麻煩的事情,枯燥重復,卻又不能不去做。 對Adapter1般都繼承BaseAdapter復寫幾個方法,getView里面使用ViewHolder存儲,其實大部份的代碼都是類似的。那末本文就帶大家1起做1次將Adapter封裝成1個通用的Adapter。
關于本文的完全Demo,可以參考KJFrameForAndroid開發(fā)框架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的顯示。
步
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈