从strings.xml中获取值来切换Android开关

3

我是Android的新手,希望能够理解另一个问题。我有一个strings.xml文件,其中的值在activity.xml中使用。如何在Java代码中使用这些值来进行switch语句?

private void gotoActivity(CharSequence text) {
    switch (text.toString()) {
        case getString(R.string.title_activity_first):
            break;

        case RADIO_BUTTON_SECCOND:
            break;
    }
}

由于“需要常量表达式”,所以无法编译。但是,strings.xml 的主要好处在于将字符串常量放在一个地方。

请帮忙。


你想要从Strings.xml获取的String值具体用于什么? - OBX
不要仅仅使用getString(R.string.title_activity_first),而是使用getResources().getString(R.string.title_activity_first) - jack jay
如果您有多个strings.xml文件,getString将返回不同的值。因此,它不能被视为常量表达式。 - K Neeraj Lal
@jackjay,你不能这样做,但是你可以有多个values文件夹——这是资源本地化的基础。总之,你不能把这些值当作“常量”来处理,因为它们不是。 - trooper
@trooper 在同一目录下有多个名称为“values”的文件夹是可能的吗? - jack jay
显示剩余2条评论
2个回答

3

很遗憾,在switch-case语句中你不能使用资源字符串。你有两个选项,选择其中之一...

  1. use static final String in your activity.

    Example: Initialize the strings

    public static final String TITLE_ACTIVITY_FIRST = "activity_title";

    public static final String RADIO_BUTTON_SECCOND = "radio_button_second";

    Then you can use the TITLE_ACTIVITY_FIRST in switch case. like,

     switch(text.toString()){
      case TITLE_ACTIVITY_FIRST: break;
      case RADIO_BUTTON_SECOND: break;
       }
    

    No error will show!

  2. use if-else. You can then use your resource strings.

    Example:

    if(text.toString().equals(getString(R.string.title_activity_first))){ //your code in case of 1st condition }else if(text.toString().equals(getString(R.string.title_activity_second))){ //your code in case of 2nd condition }

第二种方法可能看起来有些笨拙,但你不需要太多地修改你的代码。而第一种方法可能看起来相当方便,你稍后可以很容易地进行修改。希望能对你有所帮助!

是啊,谢谢。我知道其他方法,但这似乎更直观一些。Java中的坏开关 :( - trashgenerator
很高兴能帮到你!祝你编程愉快 :) - Tahmid Rahman

1
您不能使用getString(R.string.title_activity_first),因为它返回应用程序包的默认字符串表中的本地化字符串。因此,结果将根据语言环境而不同,因此它不会是一个常量。您甚至不能使用 getString() 方法获取特定的本地字符串。最好使用静态 final String 字段。请参考这里

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接