Java 菜单按钮不工作

Java 菜单按钮不工作,java,android,overriding,Java,Android,Overriding,我想在用户按下菜单按钮时添加一些选项,我尝试了以下方法,但在运行应用程序并按下菜单按钮时似乎什么都没有发生: 菜单xml文件 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/Map_view" android:

我想在用户按下菜单按钮时添加一些选项,我尝试了以下方法,但在运行应用程序并按下菜单按钮时似乎什么都没有发生:

菜单xml文件

<?xml version="1.0" encoding="utf-8"?>
        <menu xmlns:android="http://schemas.android.com/apk/res/android">
         <item android:id="@+id/Map_view"
         android:title="@string/Map_view"
         android:icon="@drawable/satellite_view">
     <menu>
     <group android:checkableBehavior="single"
            android:id="@+id/menu_items">              
        <item android:id="@+id/satellite_view"
              android:icon="@drawable/satellite_view"
              android:title="@string/satellite_view"/>

        <item android:id="@+id/street_view"
              android:icon="@drawable/street_view"
              android:title="@string/street_view"/>
      </group>
     </menu>
  </item>              
</menu>

MapActivity类

    package com.example.MyMapActivity;
    import java.util.List;
    import android.graphics.drawable.Drawable;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuInflater;
     import android.view.MenuItem;

    import com.google.android.maps.GeoPoint;
     import com.google.android.maps.MapActivity;
     import com.google.android.maps.MapController;
     import com.google.android.maps.MapView;
      import com.google.android.maps.Overlay;
     import com.google.android.maps.OverlayItem;

     public class MyMapActivity extends MapActivity {

    private MapView mapview;
    private MapController mapcontroller;
    private GeoPoint gp;


    //creating a class to for OverLays


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        //setting the zoom controls
        mapview = (MapView)findViewById(R.id.mapview);
        mapview.setBuiltInZoomControls(true);
        mapview.setSatellite(true);


        List<Overlay>mapOverlays = mapview.getOverlays();
        // pass the drawable to instance of the OVerlay class.
        Drawable drawable = this.getResources().getDrawable(R.drawable.marker);
        MyOverlay overlay = new MyOverlay(drawable,this);


       //setting a GeoPoint
        mapcontroller=mapview.getController();
        String coordinates[] = {"23.68855","86.97455"};
        double lat = Double.parseDouble(coordinates[0]);
        double longi = Double.parseDouble(coordinates[1]);
        gp = new GeoPoint((int)(lat*1E6), (int)(longi*1E6));

        OverlayItem overlayitem = new OverlayItem(gp, "Hello ", "I'm in Asansol");

        GeoPoint point2 = new GeoPoint(35410000, 139460000);
        OverlayItem overlayitem2 = new OverlayItem(point2, "Sekai, konichiwa!", "I'm in Japan!");


        overlay.addOverlay(overlayitem); //  call this method for each overlayitem 
        overlay.addOverlay(overlayitem2);
        mapOverlays.add(overlay);
        }
    // to inflate the menu defined in the map_menu xml file    
      public boolean OnCreateOptionsMenu(Menu menu)
      {
       MenuInflater  inflator = getMenuInflater();
       inflator.inflate(R.menu.map_menu, menu);
       return true;
     }

     public boolean OnOptionsItemSelected(MenuItem item)
     {
       switch(item.getItemId())
       {
       case R.id.satellite_view:
           if(item.isChecked())
           mapview.setSatellite(true);
           return true;
       case R.id.street_view:
           if(item.isChecked())
           mapview.setStreetView(true);
               return true;
        default:
            return super.onOptionsItemSelected(item);
       }
     }

    @Override
    protected boolean isRouteDisplayed() {
        // TODO Auto-generated method stub
        // this method must return true if your app returns driving directions , else return false
        return false;
    }
}
package com.example.MyMapActivity;
导入java.util.List;
导入android.graphics.drawable.drawable;
导入android.os.Bundle;
导入android.view.Menu;
导入android.view.MenuInflater;
导入android.view.MenuItem;
导入com.google.android.maps.GeoPoint;
导入com.google.android.maps.MapActivity;
导入com.google.android.maps.MapController;
导入com.google.android.maps.MapView;
导入com.google.android.maps.Overlay;
导入com.google.android.maps.OverlayItem;
公共类MyMapActivity扩展了MapActivity{
私有地图视图;
专用地图控制器;
私人地质点gp;
//创建用于覆盖的类
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//设置缩放控件
mapview=(mapview)findViewById(R.id.mapview);
mapview.SetBuilTinZoomControl(真);
mapview.setSatellite(真);
ListmapOverlays=mapview.getOverlays();
//将drawable传递给OVerlay类的实例。
Drawable Drawable=this.getResources().getDrawable(R.Drawable.marker);
MyOverlay覆盖层=新的MyOverlay(可拉伸,本);
//设置地质点
mapcontroller=mapview.getController();
字符串坐标[]={“23.68855”,“86.97455”};
double lat=double.parseDouble(坐标[0]);
double longi=double.parseDouble(坐标[1]);
gp=新的地质点((内部)(纬度*1E6),(内部)(经度*1E6));
OverlayItem OverlayItem=新的OverlayItem(gp,“你好”,“我在Asansol”);
地质点2=新的地质点(35410000、139460000);
OverlayItem overlayitem2=新的OverlayItem(第2点,“Sekai,Konichawa!”,“我在日本!”);
addOverlay(overlayitem);//为每个overlayitem调用此方法
叠加。添加叠加(叠加项2);
mapOverlays.add(叠加);
}
//为地图菜单xml文件中定义的菜单充气
公共布尔onCreateOptions菜单(菜单)
{
MenuInflater充气机=getMenuInflater();
充气机。充气(右菜单。地图菜单,菜单);
返回true;
}
公共布尔值OnOptionsItemSelected(菜单项项)
{
开关(item.getItemId())
{
案例R.id.卫星视图:
如果(item.isChecked())
mapview.setSatellite(真);
返回true;
案例R.id.街道视图:
如果(item.isChecked())
mapview.setStreetView(真);
返回true;
违约:
返回super.onOptionsItemSelected(项目);
}
}
@凌驾
受保护的布尔值isRouteDisplayed(){
//TODO自动生成的方法存根
//如果应用程序返回驾驶方向,则此方法必须返回true,否则返回false
返回false;
}
}

简短回答:
onCreateOptions菜单
必须以小写o开头,而不是大写o

更详细的回答:在Java中,方法名总是以小写字母开头(根据约定,不是因为Java编译器强制执行),Android忠实地遵循约定。您打算重写
活动.onCreateOptions菜单
,但实际上创建了一个全新的方法,
MyMapActivity.onCreateOptions菜单
。当然,你可以创建任何你想要的方法,所以编译器什么也不说。无论何时,您都应该用
@Override
标记它,告诉编译器您正在做的事情。如果您对当前代码这样做,编译器会抱怨您声称覆盖了一个方法,但实际上您没有。您的IDE甚至可以提供更正的拼写作为建议。如果您使用的是Eclipse,您甚至可以将其配置为需要
@Override
注释。我相信快速搜索“Java覆盖”会发现许多类似的问题,这可能会帮助您解决