【问题标题】:How to solve error: "Resource IDs cannot be used in switch statement in Android library modules" [duplicate]如何解决错误:“资源 ID 不能在 Android 库模块的 switch 语句中使用”[重复]
【发布时间】:2018-12-26 08:56:43
【问题描述】:

我将其他人创建的 Android 项目作为库模块导入到我的项目中。即使在清理和重建项目后,我也会收到以下错误:

需要常量表达式 资源 ID 不能在 switch 中使用 Android库中的语句

如何解决这个错误?

【问题讨论】:

标签: java android switch-statement


【解决方案1】:

正如错误所说,R.id.someId 不是最终变量(静态 final int),因此您不能直接对它们使用switch 子句。而是用经典重写整个开关

if (v.getId() == R.id.openPictureBtn) {
 ... 
} else if (v.getId() == R.id.openCameraBtn) {
 ... 
}

条件语句。

【讨论】:

    【解决方案2】:

    尝试在其中一项上按 F4:

    public final class R {
        public static final class anim {
            public static int abc_fade_in = 0x7f010001;
            public static int abc_fade_out = 0x7f010002;
    

    它们没有被宣布为最终的。

    所以你需要使用 if-else 语句而不是 switch。

    作为历史记录,它们曾经在旧版本的 Android 中是最终版本...

    这里的详细信息: Switches Suddenly Broken

    【讨论】:

      【解决方案3】:

      您的主要问题是switch 语句需要常量值作为比较器,无论是文字值,例如1"hello"final 在类级别声明的变量。 Android R.id不是自 API 14 以来一直保持不变,如该错误消息中所述,因此不能用作 switch 语句的一部分。

      您的替代方法是使用 if else 语句,因为它们不需要常量值,如下所示:

      if (v.getId() == R.id.something) {
          // Do something
      } else if (v.getId() == R.id.something_else) {
         // Do something else
      }
      // Repeat however many times required
      else {
         // Default value
      }
      

      【讨论】:

      • 谢谢伙计。一个简单的技巧:alt+enter on switch 语句由android studio自动替换它
      【解决方案4】:

      您可以为每个视图设置一个标签,并在开关盒中使用该标签。像这样的:

      在你看来:

      ...
      android:tag="test" />
      

      在代码中:

      switch(v.getTag()){
          case "test":
          // Do Something
          break;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多