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