4324


intentでやりとりする情報からR.idを取るに当たって下記の様にHashMapで "news" => R.id.menu_new
といった関連付けを行っているのですが、もっとスマートな方法はあるのでしょうか？  
R.idをそのまま投げるやり方もあるのですが、外部とやり取りする際に文字列にするので結局変換が必要です。

[code]

    static HashMap<String,Integer> menuIdTable = new HashMap<String, Integer>() {
        {
            put("news", R.id.menu_news);
            put("message", R.id.menu_message);
            put("bookmark", R.id.menu_bookmark);
            put("ranking", R.id.menu_ranking);
        }
    };
    
[/code]


CC BY-SA 3.0
2015-01-09T06:02:59.403
4323
2015-01-09T06:40:23.597
525
question
android
R.idへの文字列のひも付け方法について


[Resources.getIdentifier()](http://developer.android.com/reference/android/content/res/Resources.html#getIdentifier\(java.lang.String,%20java.lang.String,%20java.lang.String\))
が用意されています。

以下のような形:

[code]

    int id = getResources().getIdentifier(strId, "id", getPackageName());
    
[/code]

ユーティリティメソッドと使い方は以下のようになるでしょう:

[code]

    static int string2Rid( Context cx, String strId) {
    
        return cx.getResources().getIdentifier( strId, "id", cx.getPackageName());
    
    }
    
    ...
    // Inside Activity
    {
        final String receivedIdStr = "bookmark";
    
        ...
    
        final String menuIdStr = "menu_" + receivedIdStr;
        final int menuId = string2Rid(this, menuIdStr);
        if ( menuId == 0) throw DeathByDragonError(); 
    
        TextView targetView = (TextView)findViewById(menuId);
    
        ...
    }
    
[/code]


CC BY-SA 3.0
2015-01-09T06:40:23.597
4324
2015-01-09T06:40:23.597
4978
4323
answer