ListViewの中のViewのインスタンスは使いまわされると書きながらも、そういえば自分では確認していなかったな、と。
そこで前回のサンプルにViewが生成される度にインクリメントされる変数を用意して実際にViewがどのように利用されているか確認してみました。
Viewのインスタンス番号はListViewの各行の一番左側に表示されているものになります。
実際に確認してみて予想外だったのは、最初に作られていくときは昇順に並ぶだろうと思っていたことです。
画像を見てもらうとわかるように、Viewの順序はバラバラです。
またスクロールするたびに順序はさらにバラバラになります。
本当に使いまわされていたんですね。
ということは、ListAdapterのgetView()では必ず正確な値を詰め直してListViewに返してやらなければなりません。
職場で文字がスクロールするTextViewを作って置いたとき、関係のないセルのテキストまでスクロールしていたのですが、それはこのことを知らずに文字列だけを設定していてスクロール値は放置していたからでした。
やっぱりわからないことは自分で確認するのが良いですね。
確認に使用したサンプルは↓コチラになります。
ListViewTest.ViewInstance.zip