0

我有一个项目清单。他们每个人都有一组用TextViews 显示的数据。该数据基本保持不变。但是我有一个距离字段,每当我从位置提供者那里获得新锁时,我都想更新它。

问题是:我应该只更新我的数据并调用notifyDataSetChanged()我的适配器还是有更有效的方法?

重新加载所有列表(我在 ViewPager 中有几个)似乎非常昂贵,因为每个列表项中的一个 TextView 需要更新。

这是我getView()的适配器。它可能会有所帮助:

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.eventrow, parent, false);

        // Creates a ViewHolder and store references to the two children views
        // we want to bind data to.
        holder = new ViewHolder();

        holder.title = (TextView) convertView.findViewById(R.id.eventTitle);
        holder.distance = (TextView) convertView.findViewById(R.id.eventDistance);

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.title.setText(((EventItem) getItem(position)).getTitle());
    holder.distance.setText(String.valueOf(((EventItem) getItem(position)).getDistance()));

    return convertView;
}

我也考虑过直接引用,holder.distance但在外面做这件事似乎是个坏主意getView()

4

1 回答 1

1

修改数据的正确方法是更改​​列表项,然后调用notifyDataSetChanged().

我想到的唯一选择是在列表视图上再次设置适配器,这要贵得多。没有其他方法。

所以答案是:你必须通过notifyDataSetChanged().

于 2012-05-14T22:25:50.000 回答