在每种情况下,它都会给我错误案例表达式必须是常量表达式。我正在使用Google Maps API V2上的应用程序,我已将地图类型添加到选项菜单(onOptionItemSelected)
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.mapTypeNormal:
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
break;
case R.id.mapTypeTerrain:
mMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
break;
case R.id.mapTypeSatellite:
mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
break;
case R.id.mapTypeHybrid:
mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
break;
case R.id.gotoCurrentLocation:
gotoCurrentLocation();
break;
default:
return super.onOptionsItemSelected(item);
}
return super.onOptionsItemSelected(item);
}
尝试将switch转换为if-else ..但是出现相同的错误
@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);
}
答案 0 :(得分:0)
问题是你所有的R.id值实际上都不是最终值。在您的R文件中,您发现它们类似于public static int sample=0x7f035054;
。
该问题的解决方案是使用if语句。你第二次提供的代码应该工作。你不可能得到一个" case表达式必须是常量表达式"如果你已经删除了switch语句并使用了那些if语句。
尝试重新启动IDE并重建项目,switch语句肯定会被if语句替换。