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;
}
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
also, danke Mann! – breathe0
Gern geschehen! Ja, natürlich meinte ich onTap()! ;) – Flo