我有一个项目列表。它们中的每一个都有一组显示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()
之外做这件事似乎不太好。
答案 0 :(得分:1)
修改数据的正确方法是更改列表项,然后调用notifyDataSetChanged()
。
我想到的唯一选择是再次在列表视图上设置适配器,这种方式更加昂贵。没有别的办法。
所以答案是:你必须经历notifyDataSetChanged()
。