如果选择了地图标记,则执行一个操作,否则执行另一个操作

时间:2012-04-22 13:45:33

标签: android android-mapview

我有一个使用itemizedlayout在其上放置标记的mapview。如果用户触摸地图上不是标记的点,我想执行操作A,如果用户选择标记,那么我想使用onTap方法进行另一个操作。问题是,我使用的每一种技术,当用户点击标记时,我都会得到两个动作。我非常感谢有关这项工作的任何想法。我会发布代码,但是我尝试过的所有代码都因为它应该正常工作而失败了! :)任何帮助表示赞赏。

我想出来了..我们必须在onTap中调用超类,然后我同时使用onTap方法..查看代码和注释。

public class MarkerMapOverlay extends ItemizedOverlay<OverlayItem> {

Context mContext;

private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();

public MarkerMapOverlay(Drawable defaultMarker, Context context) {
    super(boundCenter(defaultMarker));
    mContext = context;
}


public void addOverlay(OverlayItem marker) {
    mOverlays.add(marker);
    populate();
}

@Override
protected OverlayItem createItem(int i) {
    return mOverlays.get(i);
}

@Override
public int size() {
    return mOverlays.size();
}

public boolean onTap (final GeoPoint p, final MapView mapView){
    //call the superclass, did it hit a marker?  If yes, it returns true onTap(index)
    //returned a marker and event is handled and we do stuff with the marker in onTap(index)
    if (super.onTap(p, mapView)) {
        return true;
    } 
    //We did not hit a marker, do other stuff and return the event has handled.
    Toast.makeText(mContext, "touch", Toast.LENGTH_SHORT)
    .show();
    return true;

}



@Override
protected boolean onTap(int index) {
    OverlayItem item = mOverlays.get(index);
    AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
    dialog.setTitle(item.getTitle());
    dialog.setMessage(item.getSnippet());
    dialog.show();
    return true;
}

}

1 个答案:

答案 0 :(得分:0)

对于标记操作,请使用onTap中的ItemizedOverlay

对于其他触摸操作,请使用onTouchListener的{​​{1}}:

mapView