通常,很多人都是把Adapter內(nèi)嵌在Activity,而且Adapter的數(shù)據(jù)集合也是Activity的成員變量,因此經(jīng)常發(fā)生數(shù)據(jù)集合為null引起的崩潰,調(diào)用Adapter.notifySetDataChanged()界面有時候并沒有刷新。
建議保持一種Adapter編寫風(fēng)格,這樣可以方便錯誤排查,和ListView、GridView相關(guān)的Adapter全部都繼承BaseAdapter,并且數(shù)據(jù)字典由構(gòu)造函數(shù)直接注入,自定義刷新方法并傳入新數(shù)據(jù),確保界面的有效刷新。模板代碼如下:
public class TestAdapter<T> extends BaseAdapter {
private List<T> mList;
private Context mContext;
public TestAdapter(List<T> mList, Context mContext) {
super();
this.mList = mList;
this.mContext = mContext;
}
public void refresh(List<T> mList){
this.mList = mList;
this.notifyDataSetChanged();
}
@Override
public int getCount() {
return mList == null ? 0 : mList.size();
}
@Override
public T getItem(int position) {
return mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if(convertView==null){
convertView = View.inflate(mContext, R.layout.item_layout, null);
holder = new ViewHolder();
holder.ivTest = ViewUtils.findViewById(convertView, R.id.iv_test);
holder.tvTest = ViewUtils.findViewById(convertView, R.id.tv_test);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
// TODO Auto-generated method stub
return convertView;
}
static class ViewHolder {
TextView tvTest;
ImageView ivTest;
}
}
可能覺得有點老生常談,對于初學(xué)者而言,看起來似乎都會寫,但能夠保證不出問題,就是一種能力了。