Java 将字符串转换为对象名。即R.string.objectname

Java 将字符串转换为对象名。即R.string.objectname,java,android,string,object,Java,Android,String,Object,我很难弄清楚如何使用sting作为对象名。让我解释一下。我有一个动态分配的图像,我标记它。我将该标记作为一个字符串,并存储了一个与标记同名的字符串定义。我不想使用与sting名称相同的标记设置Text。以下是我努力实现的目标: public void ShowDefinition(ImageView v){ String str=(String) v.getTag(); setContentView(R.layout.ditionary);

我很难弄清楚如何使用sting作为对象名。让我解释一下。我有一个动态分配的图像,我标记它。我将该标记作为一个字符串,并存储了一个与标记同名的字符串定义。我不想使用与sting名称相同的标记设置Text。以下是我努力实现的目标:

        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语句是我希望以更简单的方式执行的。string str是从标记中提取的字符串。正如您所看到的,android资源字符串具有相同的名称,但是我想不出在setText参数中使用str的任何方法。有什么想法吗

使用equals方法:

如果您有java7,也可以使用switch case

switch(str) {
   case "def1":
     ...
     break;  
}
你应该使用equals

您可以通过..访问您的字符串

String def1String = getResources().getString(R.string.def1);
t.setText(def1String);
getResources是上下文或活动上的方法。

用于按名称查找资源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替换为应用程序的包名。

从代码示例中可以看到,我在这里猜测您的数据类型,但看起来您需要使用HashMap将字符串与文本关联,这是另一个字符串吗?您正在setText中设置的。这简化了if/else条件,更具动态性,因为它是散列的,所以性能更高

我不确定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);

您还可以做一些事情,其中R.string本身是一个HashMap,而不是复制它,如果您有权访问它的话。更改它就是…看起来它可能是某个Android库。您可能还想考虑使用java反射来查找和/或初始化映射,这样您就不必每次更改DEFS时更改代码。

有一个有效的SETTY文本形式,它占用一个资源ID。如果我遗漏了什么,你能给我提供一些链接吗?投票率上升让我有点惊讶。他试图避免使用if语句,而不是学习如何正确使用它们。关于访问字符串错误的注释不正确。存在多个setText方法。其中一个需要一个资源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"));
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));