HashMap с BitmapDrawable не возвращает возможность рисования

у меня есть HashMap, как это

HashMap<String, BitmapDrawable> bitmapDrawables = new HashMap<String, BitmapDrawable>();

Теперь у меня есть метод, который вернет рисуемый объект:

public static BitmapDrawable getDrawable(String fileName, Context context,Bitmap bitmap) {
    BitmapDrawable drawable = bitmapDrawables.get(fileName);
    if (drawable == null) {
        drawable = convertBitmapToDrawable(bitmap, context);// will convert the bitmap to drawable
        bitmapDrawables.put(fileName, drawable);

    }
    return drawable;
    }

Он работает нормально, но иногда он не возвращает правильный рисунок, например, у меня есть 2 действия A и B, в действии A у меня есть кнопка с набором рисунков, теперь я перехожу от A -> B, а затем возвращаюсь к A в этом время, когда рисуемый объект не загружается, но когда я касаюсь этой кнопки, он становится видимым.

Почему это происходит? Я удалил haspMap и проверил, правильно ли он загружается, и когда я перемещаюсь из A-> B и возвращаюсь в A, но если я не использую Hashmap, на экранах появляется задержка.

я использую getDrawable() следующим образом:

button.setBackgroundDrawable(getDrawable(name,context,bitmap);

person Goofy    schedule 06.09.2013    source источник
comment
Как и где вы используете метод getDrawable()?   -  person sergej shafarenka    schedule 06.09.2013
comment
@beworker, пожалуйста, посмотрите мое редактирование   -  person Goofy    schedule 06.09.2013
comment
В onCreate() как обычно   -  person Goofy    schedule 06.09.2013
comment
Я подозреваю, что проблема не в этом методе, а в convertBitmapToDrawable().   -  person sergej shafarenka    schedule 06.09.2013
comment
@beworker вот как я конвертирую новый BitmapDrawable(context.getResources(), bitmap);   -  person Goofy    schedule 06.09.2013
comment
Хм. Все, что вы нам показали, прекрасно. Что, если вы поместите button.invalidate() в метод onResume()? Тогда это работает?   -  person sergej shafarenka    schedule 06.09.2013
comment
@beworker да, я пробовал, но все равно   -  person Goofy    schedule 06.09.2013


Ответы (1)


Вы можете использовать

button.setBackgroundDrawable(getDrawable(name,context,bitmap)

в методе onResume(). Кстати, ваша реализация не рекомендуется, легко вызовет утечку памяти. Подробнее см. здесь.

person yseven    schedule 06.09.2013