アイテムのリストがあります。それぞれに、TextView
sで表示されるデータのセットがあります。このデータはほとんど変更されていません。しかし、距離フィールドがあり、ロケーションプロバイダーから新しいロックを取得するたびに更新したいと思います。
問題は、データを更新してアダプタを呼び出すだけnotifyDataSetChanged()
でよいのか、それとももっと効率的な方法があるのかということです。
各リストアイテムの1つのTextViewを更新する必要があるという理由だけで、すべてのリストをリロードするのは非常にコストがかかるようです(ViewPagerにいくつかあります)。
これが私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()
。