使用HashMap <string,drawable>?</string,drawable>时需要使用的声明是什么?

时间:2015-02-10 03:58:15

标签: java android hashmap

目前我正在执行涉及HashMap的任务。而我现在正在做的是在HashMap中插入3个变量。我成功了,但有关于语法或声明的错误(我不知道哪一个)。有人可以帮助我检测我的语法/声明有什么问题并提出解决方案吗?以下是我的代码:

public static void showAVMode(Context context, String AVMode) {
    mContext = context;
    spotText = getAvModeText(AVMode);
    spotType= "";
    call_Spot=3000;
    if(mContext != null) {
        spotType=mContext.getString(R.string.AVM_name);
        currentSpot=5;
        show();
    } else {
        TvLog.d(TAG, "context is null");
    }
}

.............................

private static String getAvModeText(String mode){
    String avMode = mContext.getString(R.string.AVM_stand);

    HashMap<String,Drawable> AvModeIconTHX = new HashMap<String,Drawable>();
    AvModeIconTHX.put(mContext.getString(R.string.AVM_movTHX), mContext.getDrawable(R.drawable.set_thx));

    HashMap<String,Drawable> AvModeIconES = new HashMap<String,Drawable>();
    AvModeIconES.put(mContext.getString(R.string.AVM_stand), mContext.getDrawable(R.drawable.set_es));

    HashMap<String,Drawable> AvModeMovie = new HashMap<String,Drawable>();
    AvModeMovie.put(mContext.getString(R.string.AVM_mov), null);
    HashMap<String,Drawable> AvModeGame = new HashMap<String,Drawable>();
    AvModeGame.put(mContext.getString(R.string.AVM_game), null);
    HashMap<String,Drawable> AvModePC = new HashMap<String,Drawable>();
    AvModePC.put(mContext.getString(R.string.AVM_PC), null);
    HashMap<String,Drawable> AvModeUser = new HashMap<String,Drawable>();
    AvModeUser.put(mContext.getString(R.string.AVM_user), null);
    HashMap<String,Drawable> AvModeDyn = new HashMap<String,Drawable>();
    AvModeDyn.put(mContext.getString(R.string.AVM_dyn), null);
    HashMap<String,Drawable> AvModeDynFix = new HashMap<String,Drawable>();
    AvModeDynFix.put(mContext.getString(R.string.AVM_dynFix), null);

    HashMap<String,HashMap<String,Drawable>> mapAvMode = new HashMap<String,HashMap<String,Drawable>>();
    mapAvMode.put(TvFunctionID.AVMode.AVMODE_STANDARD, AvModeIconES);
    mapAvMode.put(TvFunctionID.AVMode.AVMODE_MOVIE, AvModeMovie);
    mapAvMode.put(TvFunctionID.AVMode.AVMODE_MOVIE_THX, AvModeIconTHX);
    mapAvMode.put(TvFunctionID.AVMode.AVMODE_GAME, AvModeGame);
    mapAvMode.put(TvFunctionID.AVMode.AVMODE_PC, AvModePC);
    mapAvMode.put(TvFunctionID.AVMode.AVMODE_CUSTOM, AvModeUser);
    mapAvMode.put(TvFunctionID.AVMode.AVMODE_DYNAMIC, AvModeDyn);
    mapAvMode.put(TvFunctionID.AVMode.AVMODE_DYNAMIC_FIXED, AvModeDynFix);

    if(mapAvMode.containsKey(mode)) {
        avMode = mapAvMode.get(mode);
    }
    return avMode;

}

错误位于代码mapAvMode.get(mode);,其中显示Type mismatch: cannot convert from HashMap<String,Drawable> to String。有quickfix但它没有解决错误。有人可以帮我弄这个吗?我认为我的代码可以比这短得多。任何建议都会非常感激。

2 个答案:

答案 0 :(得分:1)

您的avMode变量是类型String,而mapAvMode返回的对象是HashMap<String,Drawable>。在HashMap中,第一个参数是键(此处为String),第二个参数是值(此处为Drawable)。如果要从此HashMap获取String值,则应执行:avMode = mapAvMode.get(mode).get(yourParam);

更新:抱歉,我提供了错误的信息。所以我正在纠正我的答案。 mapAvMode.get(mode)将返回HashMap<String, Drawable>,如果您这样写:

mapAvMode.get(mode).get(yourParam);

它将返回Drawable。因此,您的avMode变量必须是HashMap,并且此行将起作用:

avMode = mapAvMode.get(mode)

或者它必须是Drawable,这一行可行:

avMode = mapAvMode.get(mode).get(yourParam);

答案 1 :(得分:0)

`mapAvMode.get(mode)` 

返回一个drawable,你将其类型转换为String,将你的avMode更改为drawable它将解决你的问题,HashMap.get(key)用于根据你传递的键得到值,这里我们的值是可绘制的。