0

すべてのメニュー項目がリストに格納されているアプリケーションで 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 では発生しません。

4

1 に答える 1