如何更改onOptionsItemMenuSelected Android中的布尔值

时间:2013-12-18 12:08:12

标签: android xml maps

我有一个选项菜单,允许用户在谷歌地图上更改地图类型。这工作正常,但我想提供功能来更改目前显示我用布尔值控制的标记。这是我目前的代码。

 @Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    getMenuInflater().inflate(R.menu.map_styles_menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    super.onOptionsItemSelected(item);

    switch(item.getItemId()) {
    case R.id.normal_map:
        mapType=GoogleMap.MAP_TYPE_NORMAL;
        break;

    case R.id.satellite_map:
        mapType=GoogleMap.MAP_TYPE_SATELLITE;
        break;

    case R.id.terrain_map:
        mapType=GoogleMap.MAP_TYPE_TERRAIN;
        break;

    case R.id.hybrid_map:
        mapType=GoogleMap.MAP_TYPE_HYBRID;
        break;
    }

    googleMap.setMapType(mapType);
    return true;
}

我想我想做的是创建另一个案例陈述,如此

case R.id.present:
        mapChange=true;
        break;
case R.id.past:
        mapChange=false;
        break;

我使用菜单XML文件中的项来表示地图,我是否也可以使用项来更改布尔值?

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

<item android:id="@+id/map_types"
    android:title="Menu"
    android:showAsAction="always">
    <menu>
        <item android:id="@+id/normal_map"
            android:title="Mormal map"/>
        <item android:id="@+id/satellite_map"
            android:title="Satellite map"/>
        <item android:id="@+id/terrain_map"
            android:title="Terrain map"/>
        <item android:id="@+id/hybrid_map"
            android:title="Hybrid map"/>
    </menu>     
</item>   

所以我会在上面添加一个项目,如

<item android:id="@+id/past"
            android:title="Change to past markers"/>

2 个答案:

答案 0 :(得分:0)

首先,我建议您尝试一切您认为可行的方法。如果仍然没有找到答案,那么发布在SO上。 根据您提到的解释和我的有限知识,我得出结论,您需要在选项菜单中选择一个选项,该选项将在您的标记屏幕和其他标记屏幕之间切换。

所以在xml中添加选项:

<item android:id="@+id/past"
        android:title="Change to past markers"/>

然后在你的java文件中添加以下代码:

case R.id.past:
        if(mapChange){
        mapChange=false;
        //your code to show other markers
        }else{
            mapChange=true;
            //your code to show same markers etc
        }
        break;

答案 1 :(得分:0)

如果你想要,你可以创建另一个名为“changeState()”的方法,并将你建议的开关案例放在那个方法中

Private void changeState() {

Switch(VARIABLE-HERE) 
{
case R.id.present: 
mapChange=true; 
break;
case R.id.past: 
mapChange=false; 
break;
} 
} 

然后打电话给它。

googleMap.setMapType(地图类型);