我有一个使用 itemizedlayout 放置在其上的标记的地图视图。如果用户触摸了地图上不是标记的点,我想执行动作 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;
}
}