Установите ImageView src из HashMap - PullRequest
       18

Установите ImageView src из HashMap

0 голосов
/ 22 октября 2018

У меня есть HashMap для значков погодных условий в качестве статического метода в классе.в моем адаптере я получаю значение и setImageResource с этим, но столкнулся с исключением. Я много искал и нашел это решение, но с исключением.Вот часть моего HashMap:

static String getWeatherConditionList(Context mContext, String code) {
    HashMap<String, String> weatherConditionMap = new HashMap<String, String>();
    weatherConditionMap.put("0", String.valueOf(mContext.getResources().getDrawable(R.drawable.thunderstorm)));
    weatherConditionMap.put("1", String.valueOf(mContext.getResources().getDrawable(R.drawable.tstormrain)));
return weatherConditionMap.get(code);

}

и для imageView я использовал это:

imageForcast.setImageResource(Integer.getInteger(PublicMethods.getWeatherConditionList(mContext, code)));

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

Сначала вы всегда должны добавить любое исключение, которое у вас возникло, к вашему вопросу и объяснить поток кода.Во-вторых, почему вы приводите int в строку и обратно, возможно вместо этого попробуйте использовать HashMap<String,Drawable> и вызвать:

imageForcast.setImageDrawable(drawable);

0 голосов
/ 22 октября 2018

Вы должны хранить в Drawable карту

public static Drawable getWeatherConditionList(Context mContext, String code) {
      HashMap<String, Drawable> weatherConditionMap = new HashMap<>();
      weatherConditionMap.put("0",mContext.getResources().getDrawable(R.drawable.thunderstorm));
      weatherConditionMap.put("1",mContext.getResources().getDrawable(R.drawable.tstormrain));
return weatherConditionMap.get(code);
}

Вы должны установить изображение с Drawable

imageForcast.setImageDrawable(PublicMethods.getWeatherConditionList(mContext, code));
0 голосов
/ 22 октября 2018

В вашем коде есть некоторые проблемы.

  1. Каждый раз, когда вы звоните getWeatherConditionMap(), weatherConditionMap воссоздается.

  2. Этоплохая идея поместить рисованные объекты в hashmap.

  3. Вам действительно нужен оператор static?

Вы можете изменить это следующим образом.

private static HashMap<String, Integer> weatherConditionMap = new HashMap<>();

private static void createHashMap() {
    weatherConditionMap.put("0", R.drawable.thunderstorm);
    weatherConditionMap.put("1", R.drawable.tstormrain);
}

static int getWeatherContion(String code) {
    return weatherConditionMap.get(code);
}

Сначала вы вызываете createHashMap(), а в вызывающем методе

imageForcast.setImageResource(getWeatherCondition(code));

Конечно, вы можете исключить static.


Обновление

createHashMap() следует вызывать один раз.Если вы не можете найти точное положение для помещения этой функции, проверьте, вызывается ли она ранее в функции получения.

static int getWeatherContion(String code) {
    if (weatherConditionMap.size() == 0) {
        createHashMap();
    }
    return weatherConditionMap.get(code);
}

Или, возможно, вам не нужен HashMap, если вы просто хотите использовать ресурс отображения для кода.

static int getWeatherConditionMap(String code) {
    switch (code) {
        case "0":
            return R.drawable.thunderstorm;
        ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...