【问题标题】:Context menu on a MapView, or other solutionsMapView 或其他解决方案上的上下文菜单
【发布时间】:2011-01-14 18:58:30
【问题描述】:

我需要在我的应用程序中在 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;
    }

【问题讨论】:

    标签: android contextmenu android-mapview


    【解决方案1】:

    由于长点击事件不会触发,请尝试以下操作。

    编写您自己的 Overlay 类并覆盖 onTab() 方法。在方法中调用 openContextMenu() 方法。当您在地图上进行选项卡时,这应该会打开上下文菜单。

    【讨论】:

    • 我猜“onTab”的意思是“onTap”;)好吧,我用一个指示指针是否移动的标志覆盖了onTouchEvent方法,而不是onTap。如果不是,如果事件 ACTION_UP 在事件 ACTION_DOWN 之后一秒,我调用了 openContextMenu 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多