【问题标题】:Using string from resource XML in Switch?在 Switch 中使用资源 XML 中的字符串?
【发布时间】:2015-04-09 14:53:30
【问题描述】:

这里是 Android 新手,如果这是一个简单的问题,我深表歉意。

我正在尝试在我的 XML 中使用基于字符串资源的开关。它看起来像这样:

switch (myStringVariable) {
    case getResources().getString(R.string.first_string):
         break;
    case getResources().getString(R.string.second_string):
         break;
    case getResources().getString(R.string.third_string):
         break;
    default:
         break;
}

很遗憾,这行不通。我得到的错误是“需要常量表达式”。

是否有一种半优雅的方式来解决这个问题,而不必执行诸如创建 3 个字符串对象并将字符串资源分配给每个对象之类的操作?我觉得我遗漏了一些明显的东西,所以任何帮助都会很棒!

谢谢:)

【问题讨论】:

  • if else if 构造
  • 分配字符串对象这些值仍然不起作用,对吧?这些值是在运行时确定的,而不是编译时?

标签: java android switch-statement android-resources


【解决方案1】:

嗯,首先,Android基于的Java版本不支持String switch语句,所以一般要使用if/else块来代替。

编辑:如果您使用 JDK 1.7 及更高版本,则支持字符串 switch 语句

我不确定您的用例是什么,但如果您的资源 ID 为 myStringVariable,即int,您可以进行切换:

switch (myStringResId) {
case R.string.first_string:
     break;
case R.string.second_string:
     break;
case R.string.third_string:
     break;
default:
     break;
}

【讨论】:

  • 不支持字符串 switch 语句,这不是真的
  • 哦,哇,感谢您指出这一点。上次我尝试在 android 上进行 String 开关是在 2012 年,当时我们可以使用 JDK 1.7 进行编译。
【解决方案2】:

嗯,这不是最优雅的方式,但你可以使用 if - else if 语句代替 switch - case:

if (myStringVariable.equals(getString(R.string.first_string))) {
    // do something
} else if (myStringVariable.equals(getString(R.string.second_string))) {
    // do something
} else if (myStringVariable.equals(getString(R.string.third_string))) {
    // do something
}

【讨论】:

    【解决方案3】:

    您并没有错过与 Android 相关的内容,而是与 Java 相关的内容。

    查看这个关于 Java 如何管理 Switch 语句的答案:

    https://stackoverflow.com/a/3827424/2823516

    您必须使用您提到的非优雅解决方案。但谁说不优雅?是你应该做的,这让它变得优雅。

    【讨论】:

      猜你喜欢
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多