参照されているブログ記事中にもあります通りconvertViewは再利用されるため
その書き方だと再利用されたViewがconvertViewにセットされていた場合が全く考慮されていません。
http://y-anz-m.blogspot.com/2010/08/androidthe-world-of-listview.html
この辺も参考にして他の方がどう考えているのかをもっと理解した方が良いと思います。
またViewが最利用されることを考慮し取得する画像や文字列はViewとは別に管理することをお勧めします。
getView内でAsyncTaskを何の考慮も無く呼んでしまうと
スレッド数の制限により落ちる場合がある様なので注意して下さい。
http://319ring.net/blog/archives/1707
2012年2月13日10:56 zunda <javate...@gmail.com>:
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>
convertViewに渡されてくる View は、「ListView の要素として以前は表示に使っていた
けれども、今はもう表示されていないので再利用できるなら使ってください」という
ものです。
なので、実行速度(スクロールの滑らかさ)を考えなければconvertView を無視して毎回
inflate すればただしく動きます。これだと効率が悪い(頻繁に View のinflateが必要になる)
ので、通常はconvertView が null でない場合は convertView を使いまわす実装をします。
このような使い回しを実装する場合は、今回のように ViewをAsyncTask に渡して参照を
保持させるような使い方をするとAsyncTask が完了する前に View が再利用されて別の
AsyncTaskに渡される可能性があることを考慮する必要があります。
例えばAsyncTask 実行の際にURLを覚えておき、イメージがロードし終わったあとで
ImageView#getTag()が返す URL がロードしたものと一致することをチェックする
方法などが考えられます。
2012/2/13 noxi <android.w...@gmail.com>:
--
YAMAZAKI Makoto