すべてのメニュー項目がリストに格納されているアプリケーションで menu を使用しています。メソッド getView が呼び出されるときに、項目名とアイコンを指定します。アイコンには StateListDrawable を使用します (ただし、単純な色のドローアブルも試しました)。問題は、メニューをスクロールしようとして getView が呼び出されるたびに、リスト全体が消えることです。画像ビューメソッド setImageDrawable(); である原因を突き止めました。コメントアウトすると、すべて正常に動作します。最初に画像をダウンロードする必要があるため、このメソッドは別のスレッドで呼び出されます。setImageDrawable() コードを getView メソッドに直接移動すると、すべてが読み込まれ、メニューは消えませんが、画像がダウンロードされてメニューが使用可能になるまでの遅延が長すぎます。
動作するコード:
icon.setVisibility(View.INVISIBLE);
icon.setImageDrawable(new ColorDrawable(Color.CYAN));
icon.setVisibility(View.VISIBLE);
メニューを非表示にするコード。
context.getNetworkManager().execute(new ImageRunnable() {
boolean success = true;
@Override
public void run(Bitmap image) {
if (image == null) {
success = false;
}
final Bitmap selectedImage = image;
context.getNetworkManager().execute(new ImageRunnable() {
@Override
public void run(Bitmap image) {
if (image == null) {
success = false;
}
if (success) {
StateListDrawable icons = new StateListDrawable();
icons.addState(new int[] {android.R.attr.state_pressed},
new BitmapDrawable(context.getResources(), selectedImage));
icons.addState(new int[] {android.R.attr.state_selected},
new BitmapDrawable(context.getResources(), selectedImage));
icons.addState(new int[] {-android.R.attr.state_selected},
new BitmapDrawable(context.getResources(), image));
icon.setImageDrawable(icons);
//icon.setImageDrawable(new ColorDrawable(Color.CYAN));
icon.setVisibility(View.VISIBLE);
}
}
});
}
});
これを解決する方法はありますか?これは、エミュレーターと Galaxy SII で発生しますが、Galaxy SIII では発生しません。