将字符串转换为对象名称。 I.E. R.string.objectname

时间:2011-10-27 06:37:50

标签: java android string object

我无法弄清楚如何使用sting作为对象名称。让我解释。我有一个动态分配的图像,我标记。我将该标记作为字符串,并且我有一个与标记同名的存储字符串(定义)。我不能使用与sting名称相同的标签来设置SetText()。这是我想要实现的目标:

        public void ShowDefinition(ImageView v){
        String str=(String) v.getTag();
        setContentView(R.layout.ditionary);
        TextView t = (TextView)findViewById(R.id.definition);
        if(str == "def1")
            t.setText(R.string.def1);
        if(str == "def2")
            t.setText(R.string.def2)
        }

if语句是我想以更简单的方式做的事情。字符串str是从标签中拉出的字符串。正如你所看到的,android资源字符串具有相同的名称,但我无法想出在setText参数中使用str的任何方法。有任何想法吗?

4 个答案:

答案 0 :(得分:5)

使用Resources.getIdentifier(...)按名称查找资源ID。

public void ShowDefinition(ImageView v) {
    String str=(String) v.getTag();
    setContentView(R.layout.ditionary);
    TextView t = (TextView)findViewById(R.id.definition);
    t.setText(getResources().getIdentifier(str, "string", "com.your.package.name"));

com.your.package.name替换为您应用的套餐名称。

答案 1 :(得分:2)

str.equals("def1");

您应该使用equals

您可以通过..

访问您的字符串
String def1String = getResources().getString(R.string.def1);
t.setText(def1String);

getResources()是关于上下文或活动的方法。

答案 2 :(得分:0)

使用equals方法:

if(str.equals("def1")) 
...

或使用switch case(如果你有java 7)

switch(str) {
   case "def1":
     ...
     break;  
}

答案 3 :(得分:0)

我从您在代码示例中看到的内容猜测您的数据类型,但看起来您需要使用HashMap<String, Text>String与{{1}相关联你正在Text设置的(是另一个String?)。这简化了你的if / else条件,更具动态性,并且因为它是散列的,所以性能更高。

我不确定您的示例中setText()R.string.def1的来源,但是您在开始时将它们加载到R.string.def2中:

HashMap

检索时,您可以这样查看:

Map<String, Text> strToText = new HashMap<String, Text>();
strToText.put("def1", R.string.def1);
strToText.put("def2", R.string.def2);

您也可以执行t.setText(strToText.get(str)); 本身为R.string而不是将其复制的内容(如果您有访问权限,则更改它......看起来可能是某些Android库)。您可能还需要考虑使用Java反射来执行查找和/或初始化地图,这样您就不必在每次defs更改时都更改代码。