Android 在optionMenu中使用映射类型时,大小写表达式必须为常量表达式错误
在任何情况下,它都会给我错误案例表达式必须是常量表达式。我正在Google Maps API V2上开发应用程序,我已经将地图类型添加到选项菜单(onOptionItemSelected) 尝试将开关转换为if-else..,但出现相同的错误Android 在optionMenu中使用映射类型时,大小写表达式必须为常量表达式错误,android,switch-statement,optionmenu,Android,Switch Statement,Optionmenu,在任何情况下,它都会给我错误案例表达式必须是常量表达式。我正在Google Maps API V2上开发应用程序,我已经将地图类型添加到选项菜单(onOptionItemSelected) 尝试将开关转换为if-else..,但出现相同的错误 @Override public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); if (itemId ==
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
if (itemId == R.id.mapTypeNormal) {
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
} else if (itemId == R.id.mapTypeTerrain) {
mMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
} else if (itemId == R.id.mapTypeSatellite) {
mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
} else if (itemId == R.id.mapTypeHybrid) {
mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
} else if (itemId == R.id.gotoCurrentLocation) {
gotoCurrentLocation();
} else {
return super.onOptionsItemSelected(item);
}
return super.onOptionsItemSelected(item);
}
问题是,您的所有R.id值实际上并不像它们应该是最终的那样。在R文件中,您会发现它们类似于
publicstaticintsample=0x7f035054代码>
解决这个问题的方法是使用if语句。您第二次提供的代码应该可以工作。如果您删除了switch语句并使用了那些if语句,则不可能得到“case表达式必须是常量表达式”
尝试重新启动IDE并重建项目,switch语句肯定会被if语句替换 请更详细地描述错误。。。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
if (itemId == R.id.mapTypeNormal) {
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
} else if (itemId == R.id.mapTypeTerrain) {
mMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
} else if (itemId == R.id.mapTypeSatellite) {
mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
} else if (itemId == R.id.mapTypeHybrid) {
mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
} else if (itemId == R.id.gotoCurrentLocation) {
gotoCurrentLocation();
} else {
return super.onOptionsItemSelected(item);
}
return super.onOptionsItemSelected(item);
}