用android的notifyDataSetChanged()方法会进行getView,导致每次所有都刷新;效率太低,我要怎样使某个item数据改变时只刷新那个item?
我的代码如下,请大神帮我改下!谢谢
public class OfflineDownloadedAdapter extends BaseAdapter {
private List<OfflineMapCity> cities = new ArrayList<OfflineMapCity>();
private Context mContext;
private OfflineChild currentOfflineChild;
public OfflineDownloadedAdapter(Context context) {
this.mContext = context;
initCityList();
}
/**
* 重新初始化数据加载数据
*/
public void notifyDataChange() {
initCityList();
}
private void initCityList() {
if (cities != null) {
for (Iterator it = cities.iterator(); it.hasNext();) {
OfflineMapCity i = (OfflineMapCity) it.next();
it.remove();
}
}
cities.addAll(ByteOfflineMapManager.getInstance(mContext).getDownloadOfficeMapCityList());
cities.addAll(ByteOfflineMapManager.getInstance(mContext).getDownloadingCityList());
notifyDataSetChanged();
}
@Override
public int getCount() {
return cities.size();
}
@Override
public Object getItem(int index) {
return cities.get(index);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
return 0;
}
public final class ViewHolder {
public OfflineChild mOfflineChild;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView != null) {
viewHolder = (ViewHolder) convertView.getTag();
} else {
viewHolder = new ViewHolder();
currentOfflineChild = new OfflineChild(mContext);
convertView = currentOfflineChild.getOffLineChildView();
viewHolder.mOfflineChild = currentOfflineChild;
convertView.setTag(viewHolder);
}
OfflineMapCity offlineMapCity = (OfflineMapCity) getItem(position);
viewHolder.mOfflineChild.setOffLineCity(offlineMapCity);
return convertView;
}
}