【问题标题】:Convert string to object name. I.E. R.string.objectname将字符串转换为对象名称。 IE。 R.string.objectname
【发布时间】:2011-10-27 06:37:49
【问题描述】:

我无法弄清楚如何使用字符串作为对象名称。让我解释。我有一个我标记的动态分配的图像。我将该标签作为字符串获取,并且我有一个与标签同名的存储字符串(定义)。我不能使用与 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 的任何方法。有任何想法吗?

【问题讨论】:

    标签: java android string object


    【解决方案1】:

    使用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 替换为您应用的包名。

    【讨论】:

    • 这非常有效。非常感谢!感谢您弄清楚我在问什么哈哈其他人......没有......
    【解决方案2】:
    str.equals("def1");
    

    你应该使用equals

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

    String def1String = getResources().getString(R.string.def1);
    t.setText(def1String);
    

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

    【讨论】:

    【解决方案3】:

    使用equals方法:

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

    或者使用switch case(如果你有java7)

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

    【讨论】:

      【解决方案4】:

      我根据我在您的代码示例中看到的内容猜测您的数据类型,但看起来您需要使用HashMap<String, Text>StringText 相关联(是另一个@ 987654324@?) 您在setText() 中设置。这简化了您的 if/else 条件,更具动态性,并且由于它是散列的,因此性能会更高。

      我不确定R.string.def1R.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 本身是 HashMap 的地方做一些事情,而不是复制它(如果您可以访问它,请更改它...看起来可能是某个 Android 库)。您可能还想考虑使用 Java 反射来进行查找和/或初始化映射,这样您就不必在每次定义更改时都更改代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-08
        • 1970-01-01
        • 2021-10-19
        • 2017-04-20
        • 1970-01-01
        • 2012-12-25
        相关资源
        最近更新 更多