Контекстное меню в MapView или другие решения - PullRequest
0 голосов
/ 14 января 2011

Мне нужно реализовать в моем приложении контекстное меню в MapView, которое принимает координаты выбранной точки с длинным щелчком и отображает набор параметров. Я попытался зарегистрировать MapActivity для контекстного меню и затем переопределить метод oncreatecontextmenu, но событие longclick, похоже, не сработало. (например, я поместил некоторые записи в методе oncreatecontextmenu, которые никогда не показываются в ddms)

Я искал в Интернете и в документации по Android, но не нашел ничего удовлетворительного. Итак, действительно ли невозможно создать контекстное меню в MapView? Если так, есть ли способ реализовать нечто подобное? Я выкладываю (простой) код:

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

1 Ответ

3 голосов
/ 14 января 2011

Поскольку событие длинного щелчка не срабатывает, попробуйте следующее.

Напишите свой собственный класс Overlay и переопределите метод onTab ().Внутри метода вы вызываете метод openContextMenu ().Это должно открыть контекстное меню, когда вы вкладываете на карту.

...