« Nexus 6 Android 6.0.1 (MMB29K) root化 | トップページ | sysbench をとってみた »

2015.12.23

ListView の Height は WRAP_CONTENT を避けるべき

もはや常識なのだろうけど、ListView の Height を WRAP_CONTENT にすると、
http://stackoverflow.com/questions/15232895/same-convertview-instance-is-passed-for-visible-views-in-cursoradapter
この問題が出てしまう。
自分は知らなかったのでメモ。

自分で ListView の Adapter を作る場合、Height を WRAP_CONTENT にすると、複数の position で同じ convertView で呼ばれてしまう。
直後に convertView = null で再度呼ばれるので、新たに view を作ることになり、通常は問題にならないが、画像とか時間かかるのを表示しようとすると、最初に呼ばれた時点で他の position と同じ converView の Pointer を 保持するように Thread を生成して画像取得しにいくので、画像取得後には保持した Pointer の先のを更新してしまい、他の position のを上書いてしまうことになる。 (tag に unique な ID を設定して上書きを避けてても最後に設定した unique ID は重なるので1つは上書いてしまう。)
(java では pointer とは言わないか。参照かな?)

昔から謎で、最初だけの問題なので wait 入れてごまかしていたが、Layout が確定するまでは同じ convertView が渡されてしまうのが仕様っぽいので、WRAP_CONTENT は避けるべき。

MATCH_PARENT なら違う position で同じ contentView で呼ばれることはなかった。

|

« Nexus 6 Android 6.0.1 (MMB29K) root化 | トップページ | sysbench をとってみた »

プログラミング」カテゴリの記事

Android」カテゴリの記事

コメント

記事に関係ない投稿ですみません。

VDという仮想デスクトップアプリを試しました。
10位上の同様ソフトを試しましたが、ダントツで使いやすく、しかも動作も軽く感激でした。タスクバーを隠せる機能もすごく便利です。

以下、こんな機能があったらいいんじゃないかと思いましたので、お伝えさせてください。

1.特定のデスクトップに移動するときだけパスワードを要求する。

2.ソフトを終了するときにも、パスワードを要求する。

3.ウィンドウ毎に専用のデスクトップフォルダを作成して、その内容のみを表示する。また、メインのデスクトップの内容も同時で表示できるかは任意で設定できる。

4.タスクバーを隠す機能の精度をもっとあげる。(現状、ファイアフォックスで不都合が生じています)

上記の4つを実現すると、家族間でパソコンを使い分ける時に非常に便利だと感じました。特に1と2だけでも実現できるといいなーと思います。

以上、本当によいソフトをありがとうございます。ありがたく使わせていただきます。

投稿: むらすけ | 2016.02.24 20:22

ご要望、ありがとうございます。
#気付いておりませんでした。すみません。。

Homepageに書いている通りですが、Windows 7 以降、ウィンドウが消える問題や、ご指摘の4の問題などがあって、対応しきれてない状態です。
消える問題は、メニューから「集める」をしてもらえば、出てくると思いますが、対応方法が見つからず、修正できていない状態です。
別に特別なことはしてなくて普通のAPIでウィンドウを並行移動させてるだけなのですけどね。。

投稿: Salt | 2016.04.14 21:49

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: ListView の Height は WRAP_CONTENT を避けるべき:

« Nexus 6 Android 6.0.1 (MMB29K) root化 | トップページ | sysbench をとってみた »