问题与处理策略
问题描述
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_dbAdd:
......
break;
case R.id.btn_dbSave:
......
break;
case R.id.btn_dbDelete:
......
break;
default:
break;
}
}
- 在 Android 项目中,上述代码导致编译报如下错误
...... 错误: 需要常量表达式
case R.id.btn_dbAdd:
^
...... 错误: 需要常量表达式
case R.id.btn_dbSave:
^
...... 错误: 需要常量表达式
case R.id.btn_dbDelete:
^
问题原因
-
这个错误是由于 switch 语句的 case 标签中使用了非常量表达式
-
新版本的 Gradle 不再直接生成传统的
R.java
文件 -
因此,switch 语句的 case 标签中使用 ID 在编译时被视为非常量
处理策略
- 将 switch 语句改写成 if else 语句
1. 光标定位到 switch 关键字
2. 使用快捷键【Alt + Enter】
3. 点击【Replace 'switch' with 'if'】

- 在
gradle.properties
文件中,添加如下配置
android.nonFinalResIds=false