问题与处理策略
问题描述
@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