【问题标题】:Android: Reference R.string.blah based on a method inputAndroid:基于方法输入引用 R.string.blah
【发布时间】:2013-10-22 18:33:45
【问题描述】:

我的 strings.xml 中有 3 个字符串。

<string name="string1">Hello from string1</string>
<string name="string2">Hello from string2</string>
<string name="string3">Hello from string3</string>

现在,我有一个方法可以传递像“string1”或“string2”这样的字符串:

void showStringToast(String sName) {
    Toast.makeText(this, getString(R.string.[sName]), Toast.LENGTH_LONG).show();
}

当 sName 作为参数传递时,如何正确引用 R.string.sName?

【问题讨论】:

    标签: android string methods parameters parameter-passing


    【解决方案1】:

    您可以使用以下方式将参数传递给您的字符串:

    <string name="string1">Hello from %1$s (or $d if you want to pass integer) %2$d (second parameter)</string>
    

    现在从 getstring 方法传递参数:

    getString(R.string.string1,first parameter ,second parameter ...);

    this

    【讨论】:

      【解决方案2】:
      // try this
      void showStringToast(String sName) {
              Toast.makeText(this, getString(getResources().getIdentifier(sName, "string", getPackageName())), Toast.LENGTH_LONG).show();
          }
      

      【讨论】:

        【解决方案3】:

        我没有尝试过这段代码,但我相信你可以改用 HashMaps。

        在某处声明一个静态 HashMap,比如说在 Constants.java 中

        public static HashMap<String, String> map = new HashMap<String, String>();
        

        然后初始化您的地图。这必须在方法或构造函数中

        map.put("string1", "Hello from string1");
        map.put("string2", "Hello from string2");
        map.put("string3", "Hello from string3");
        

        现在您可以通过以下方式找到您的字符串:

        Toast.makeText(this, Constants.map.get(sName).toString(), Toast.LENGTH_LONG).show();
        

        别忘了导入 Constants.java

        【讨论】:

          【解决方案4】:

          R.string.something 是一个整数值,其中包含对您的字符串的引用。所以, R.string.something 在这里就像一个变量。你有没有做过这样的事情,你通过附加一些字符串来生成一个变量,使它像一个变量名,并且你生成的变量名像一个变量一样工作? :)

          相反,您可以这样做。在您的 java 源文件中,将所需的字符串值从您的资源中提取到字符串数组中。然后在必要时使用它们。希望对您有所帮助。

          【讨论】:

            【解决方案5】:

            试试这个方法:

              void showStringToast(int sName) {
            Toast.makeText(this, getString(sName), Toast.LENGTH_LONG).show();
             } 
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-07-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多