简一_hz 2016-06-23 16:09 采纳率: 48.6%
浏览 7894
已结题

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;

    }
}

  • 写回答

9条回答 默认 最新

  • bdmh 移动开发领域优质创作者 2016-06-24 00:20
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题