0

アイテムのリストがあります。それぞれに、TextViewsで表示されるデータのセットがあります。このデータはほとんど変更されていません。しかし、距離フィールドがあり、ロケーションプロバイダーから新しいロックを取得するたびに更新したいと思います。

問題は、データを更新してアダプタを呼び出すだけ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()

4

1 に答える 1

1

データを変更する正しい方法は、リストアイテムを変更してから、を呼び出すことnotifyDataSetChanged()です。

私の頭に浮かぶ唯一の選択肢は、リストビューでアダプタを再設定することです。これははるかに高価です。他に方法はありません。

したがって、答えは次のとおりです。あなたは通過する必要がありますnotifyDataSetChanged()

于 2012-05-14T22:25:50.000 に答える