Help us understand the problem. What is going on with this article?

ListViewやGridViewで一部の要素だけ更新する

More than 5 years have passed since last update.

ListViewやGridViewで表示を更新したいときに
AbsListView#invalidateViews()BaseAdapter#notifyDataSetChanged()
で更新を促すんだけど、これだと表示してるView全てを更新してしまう。

特にGridViewだと、一要素の大きさにもよるけど、大抵何十個も表示してるので、全ての要素の更新するのは無駄な場合もある。

今回はドラッグ&ドロップで並べ替えた要素のみの更新をやりたいので、表示してるView全部更新するのは効率良くない。
なので、部分的に更新する方法がないか探してみた。

結果stackoverflowに解決策があった。

Redraw a single row in a listview

/*
 * データの更新とか
 */

targetPosition // 更新対象のposition
gridView       // GridViewのインスタンス

// 更新対象のViewを取得
View targetView = gridView.getChildAt(targetPosition);
// getViewで対象のViewを更新
gridView.getAdapter().getView(targetPosition, targetView, gridView);

データの更新をした後に対象のpositionのgetView()を呼び出せばいいだけ。

ただ、getView()の中でちゃんとconvertViewを再利用するようなコードを書いてないと更新されないので注意。

gari_jp
Androidアプリ作ってます。 通信量モニター(http://goo.gl/dWA1WU )の中の人。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away