2010年03月31日

[Android] ListView内の各Viewのインスタンス

前回ListViewのサンプルを作成してから、一つ気になっていたことがありました。
ListViewの中のViewのインスタンスは使いまわされると書きながらも、そういえば自分では確認していなかったな、と。

そこで前回のサンプルにViewが生成される度にインクリメントされる変数を用意して実際にViewがどのように利用されているか確認してみました。

listview_sample3.png listview_sample4.png

Viewのインスタンス番号はListViewの各行の一番左側に表示されているものになります。
実際に確認してみて予想外だったのは、最初に作られていくときは昇順に並ぶだろうと思っていたことです。
画像を見てもらうとわかるように、Viewの順序はバラバラです。
またスクロールするたびに順序はさらにバラバラになります。
本当に使いまわされていたんですね。

ということは、ListAdapterのgetView()では必ず正確な値を詰め直してListViewに返してやらなければなりません。
職場で文字がスクロールするTextViewを作って置いたとき、関係のないセルのテキストまでスクロールしていたのですが、それはこのことを知らずに文字列だけを設定していてスクロール値は放置していたからでした。

やっぱりわからないことは自分で確認するのが良いですね。
確認に使用したサンプルは↓コチラになります。
ListViewTest.ViewInstance.zip
posted by t2low at 00:44| Android