在 Android 开发中,从 Android Gradle Plugin 3.6 版本开始,R 类的字段默认不再是常量。 这是因为 Android 为了支持资源的动态加载,对 R 类的生成方式进行了更改。
问题原因 在旧版本中,R.id.menu_about 是一个编译时常量,因此可以在 switch 语句中使用。但在新版本中,R.id.menu_about 不再是常量,而是一个引用,所以编译器会报错,提示它不是常量。
解决方案
- 使用 if-else 语句替代 switch 语句 if-else 语句不要求条件是常量,因此可以避免这个问题。
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if (item.getItemId() == R.id.menu_about) {
Toast.makeText(MainActivity.this, "点击了菜单1", Toast.LENGTH_SHORT).show();
return true;
}
// 可以继续添加其他条件
return super.onOptionsItemSelected(item);
}