在optionMenu中使用地图类型时,case表达式必须是常量表达式错误

时间:2014-12-20 07:00:05

标签: android switch-statement optionmenu

在每种情况下,它都会给我错误案例表达式必须是常量表达式。我正在使用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);

    }

1 个答案:

答案 0 :(得分:0)

问题是你所有的R.id值实际上都不是最终值。在您的R文件中,您发现它们类似于public static int sample=0x7f035054;

该问题的解决方案是使用if语句。你第二次提供的代码应该工作。你不可能得到一个" case表达式必须是常量表达式"如果你已经删除了switch语句并使用了那些if语句。

尝试重新启动IDE并重建项目,switch语句肯定会被if语句替换。