2011-01-14 5 views
0

Ich muss in meiner Anwendung ein Kontextmenü in einem MapView implementieren, das die Koordinaten des ausgewählten Objekts mit langem Mausklick übernimmt und eine Reihe von Optionen anzeigt. Ich habe versucht, das MapActivity für das Kontextmenü zu registrieren und dann die oncreatecontextmenu -Methode überschreiben, aber das Longclick-Ereignis scheint nicht zu feuern. (z. B. habe ich die oncreatecontextmenu Methode, die nie auf ddms angezeigt wird, eingeloggt)Kontextmenü auf einem MapView oder andere Lösungen

Ich suchte im Internet und in der Android-Dokumentation, aber ich habe nichts befriedigendes gefunden. Also, ist es wirklich unmöglich, ein Kontextmenü in einem MapView zu erstellen? Wenn ja, gibt es eine Möglichkeit, etwas Ähnliches zu implementieren? Ich poste den (einfachen) Code:

public class ChoosePosition extends MapActivity { 
MapView mappa; 
MapController mapCtr; 

LocationManager locManager; 
LocationListener locLstn; 
Location myLastLoc; 
String locProvider; 

double mylat, mylongi; 

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


    locManager = (LocationManager)getSystemService(LOCATION_SERVICE); 



    locLstn = new MyLocationListener(); 


    locManager.requestLocationUpdates(
    LocationManager.GPS_PROVIDER, 
    2000, 10, 
    locLstn); 

    mappa = (MapView) findViewById(R.id.map2); 
    mappa.setLongClickable(true); 

    mapCtr = mappa.getController(); 

    // attiviamo lo zoom integrato 
    mappa.setBuiltInZoomControls(true); 

// getting last known location 
    myLastLoc = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
    GeoPoint point; 
    if (myLastLoc == null) { 
     mylat = myLastLoc.getLatitude(); 
     mylongi = myLastLoc.getLongitude(); 
     // trasformiamo l'ultima posizione in un GeoPoint 
     point= new GeoPoint((int) (myLastLoc.getLatitude() * 1E6), 
       (int) (myLastLoc.getLongitude() * 1E6)); 

    } 


    // setting center and zoom 
    mapCtr.setCenter(point); 
    mapCtr.setZoom(17); 



    // adding an overlay 
    MyLocationOverlay myLocationOverlay = new MyLocationOverlay(); 
    mappa.getOverlays().add(myLocationOverlay); 

     registerForContextMenu(mappa); 


} 



@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { 
      Log.i("MYINFO", "I'm in"); 
    menu.add(Menu.NONE, 0, Menu.NONE, "First option"); 

} 

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    return true; 
    } 

Antwort

3

Als lang Click-Ereignis nicht ausgelöst folgenden versuchen.

Schreiben Sie Ihre eigene Overlay-Klasse und überschreiben Sie die onTab() - Methode. Innerhalb der Methode rufen Sie die Methode openContextMenu() auf. Dies sollte das Kontextmenü öffnen, wenn Sie auf der Karte auf die Registerkarte klicken.

+0

ich denke, dass mit "onTab" Sie "onTap" bedeuten;) ok, anstelle von onTap überschrieb ich die Methode onTouchEvent, mit einem Flag, das angibt, ob der Zeiger bewegt wird oder nicht. Wenn nicht, wenn das Ereignis ACTION_UP eine Sekunde nach dem Ereignis ACTION_DOWN war, habe ich die Methode openContextMenu aufgerufen. – breathe0

+0

also, danke Mann! – breathe0

+0

Gern geschehen! Ja, natürlich meinte ich onTap()! ;) – Flo