2010-07-20 6 views
2

я хочу добавить некоторые опции, когда пользователь нажимает на кнопку меню, я попытался следующие, но ничего не кажется, происходит, когда я запустить приложение и нажать на кнопку меню:кнопка меню не работает

в меню 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> 

Класс MapAcitivity

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; 
    } 
} 

ответ

3

Короткий ответ : onCreateOptionsMenu должен начинаться с строчной буквы o, а не в верхнем регистре O.

Более длинный ответ: в Java имена методов всегда начинаются с строчной буквы (по соглашению, а не потому, что компилятор Java ее применяет), а Android следует за конвенция добросовестно. Вы намеревались переопределить Activity.onCreateOptionsMenu, но фактически создали совершенно новый метод, MyMapActivity.OnCreateOptionsMenu. Разумеется, вам разрешено создавать любые методы, поэтому компилятор ничего не говорит. Всякий раз, когда вы планируете override a method from a superclass, вы должны пометить его @Override, чтобы сообщить компилятору, что вы делаете. Если вы сделаете это с вашим текущим кодом, компилятор будет жаловаться на то, что вы утверждаете, что переопределяете метод, но на самом деле это не так. Ваша IDE может даже предложить исправленную орфографию в качестве предложения. Если вы используете Eclipse, вы можете даже настроить его на , если хотите, указать аннотацию @Override. Я уверен, что быстрый поиск SO для «переопределения Java» вызовет массу похожих вопросов, которые могут вам помочь.

Смежные вопросы