android listview怎么实现单个item的某个数据刷新

用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;

    }
}

首先不要每次都初始化数据,你只需要修改cities中对应的数据,然后调用adapter的notify即可

楼主,你可以看看这个:
http://wuxiaolong.me/2015/07/08/listView_item_state/

notifyDataChange 这个方法去掉,你在调用item点击事件的时候, 直接修改外部传入的List里面对应的那个item数据对象,然后直接调用Adapter的notifyDataChanged()方法就可以了。这种情况下没必要去写单个Item的点击事件。

单个Item数据刷新是在什么情况下刷新的?

http://wuxiaolong.me/2015/07/08/listView_item_state/

adapter的notifydatachanged(),在数据改变时就会刷新ui。你每次都把所有的数据重新来了一遍,然后再刷新。

不要用notifydatachanged()方法,给你个例句:
//position是你要更新的item的位置,从0开始
Mapmap=listItems.get(position);
map.put("IsFocused", “关注”);//将新的文件名添加到Map以替换旧文件名
listItems.set(position, map);//替换listItems中原来的map

谢谢大家,我已经解决了

首先第一点:你的initCityList方法里面如果要清空list,直接list.clear()就好了,干嘛来遍历删除呢?
第二点,ListView用的是观察者模式,调用notifyDataSetChanged()方法,是不会调用getView方法的,不会有性能上的消耗。如果真有性能消耗,Google是不可能把这么不靠谱的方法给我们用的。
你要知道getView是直接实例化View,这个内存开销是很大的。