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

use*_*822 21 java android gradle

我们有一个多项目应用程序,我们正在努力学习.构建导致Java编译错误,如:

AFragment.java:159: constant expression required
        case R.id.aBtn:
Run Code Online (Sandbox Code Playgroud)

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

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

还要注意,常量来自主项目,而不是一个库项目.

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

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

解决方案(2014-01-09)

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

apply plugin:'android-library'

把它改成这个:

apply plugin:'android'

解决了这个问题.

laa*_*lto 33

库项目资源标识符不是常量static final ints,只是static ints.

将需要切换库资源ID的代码转换为if- else结构.

进一步阅读:http://tools.android.com/tips/non-constant-fields


Rid*_*lly 5

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