是什么原因导致 switch 语句中生成的 R.id.xxx 值出现“需要常量表达式”错误?

2022-09-01 11:45:16

我们有一个多项目应用程序,我们正在将其移至gradle。生成会导致 Java 编译错误,例如:

AFragment.java:159: constant expression required
        case R.id.aBtn:

我们已确认错误中报告的常量位于生成的 .R.java

一个线索是,错误仅适用于开关值。例如,使用 没有错误。findViewById(R.id.aBtn)

另请注意,常量来自主项目,而不是库项目之一。

对于任何想要摆脱错误的人来说,laalto的建议将解决它。

他提供的链接,以及eclipse没有显示使用gradle构建时发生的错误的事实,给了我另一个线索。eclipse 生成的 R.java将主项目常量定义为“final”,但 gradle 生成的值不是“final”。真正的解决方案必须是纠正 gradle 构建文件。

解决方案 (2014-01-09)

我们的 build.gradle 应用程序应用了 android-library 插件,而不是 android 插件。是这样的:

应用插件:“安卓库”

将其更改为:

应用插件: '安卓'

修复了问题。


答案 1

库项目资源标识符不是常量 s,只是 s。static final intstatic int

将需要打开库资源 ID 的代码转换为 - 结构。ifelse

延伸阅读: http://tools.android.com/tips/non-constant-fields


答案 2

如果使用库项目中的资源,则会发生这种情况。在这种情况下,类中的 id 不是真正的常量,因此不能在 switch 语句中使用。R


推荐