相关疑难解决方法(0)

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

我们有一个多项目应用程序,我们正在努力学习.构建导致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'

解决了这个问题.

java android gradle

21
推荐指数
2
解决办法
1万
查看次数

Android资源ID突然不是最终的,switch()'破坏了

我有一段时间的Java Android项目.今天,我已经将Android开发工具更新为Google的最新版本.而且项目破了 - 我得到了一堆"case表达式必须是常量表达式"的编译错误信息.

事实证明,R.java文件现在以不同方式生成.以前,它会有一堆

public static final int MyID=0x12340000;
Run Code Online (Sandbox Code Playgroud)

报表; 现在,它看起来(在清理/重建之后)像这样:

public static int MyID=0x12340000;
Run Code Online (Sandbox Code Playgroud)

final离开了.所以我拥有的资源ID的所有开关(我都有一些)是错误的.怎么了,拜托?只有我吗?这里的理由是什么?是否记录在任何地方?我能final以某种方式带回来吗?

eclipse android compiler-errors

17
推荐指数
4
解决办法
6269
查看次数

Android库项目中的资源ID

我想在我的网站上加入一个开源项目.但在检查"是库"选项后,有些东西如"case R.id.menu_search:"无法编译.我应该用它的常数值替换它们,或者我如何包含它?

    case R.id.menu_search: // ! case expressions must be constant expressions
        onSearchRequested();
        return true; ...
Run Code Online (Sandbox Code Playgroud)

android open-source shared-libraries

4
推荐指数
1
解决办法
4995
查看次数