更新所有适配器中的TextView - 最有效的方法

时间:2012-05-14 22:05:53

标签: android

我有一个项目列表。它们中的每一个都有一组显示TextView s的数据。这些数据基本保持不变。但是我有一个距离字段,每当我从位置提供商处获得新锁时我都会更新。

问题是:我应该只更新我的数据并在我的适配器上拨打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()之外做这件事似乎不太好。

1 个答案:

答案 0 :(得分:1)

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

我想到的唯一选择是再次在列表视图上设置适配器,这种方式更加昂贵。没有别的办法。

所以答案是:你必须经历notifyDataSetChanged()