从HashMap设置ImageView src

时间:2018-10-22 08:47:32

标签: android android-imageview drawable

我有一个用于天气情况图标的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 :(得分:1)

您的代码中存在一些问题。

  1. 每次调用getWeatherConditionMap()时,都会重新创建weatherConditionMap

  2. 将可绘制对象放入哈希图中是个坏主意。

  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()应该被调用一次。如果找不到放置该函数的确切位置,请检查它是否在getter函数中被调用过。

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;
        ...
    }
}

答案 1 :(得分:0)

首先,您应该始终添加问题中遇到的任何异常并解释代码流。 其次,为什么将int转换为字符串然后返回,或者尝试使用HashMap<String,Drawable>并调用:

imageForcast.setImageDrawable(drawable);

答案 2 :(得分:0)

您应将可绘制对象存储在地图中

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));