81
85

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-01-21

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を再利用するようなコードを書いてないと更新されないので注意。

81
85
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
81
85

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?