2011-12-31 1 views
0

ユーザーが地図の空白部分をタップすると、新しいフラグが表示され、フラグをタップするとアプリを作成しようとしていますダイアログボックスが表示されます。Android> Google Maps>オーバーレイ:別のものをタップしてさまざまなことを実現する

私は最初のonTapメソッドを自分で作成し、Google Mapsチュートリアルの2番目のメソッドをコピーして自分自身を開始しました。問題は、最初のものは常に発火し、2番目のものは決して発動しないということです。最初のメソッドを削除すると、2番目のメソッドが動作します(フラグをタップすると対応するダイアログが表示されます)。これらはItemizedOverlayクラスの両方のメソッドであり、mContextはコンストラクタによって生成されたコンテキストであり、locationsはOverlayItemのArrayListです。

私の質問は、どのように私は2つを調和させることができますか?

public boolean onTap(GeoPoint p, MapView mapView){ 
     locations.add(new OverlayItem(p, "Point 3", "Point 3")); 
     populate(); 
     return false; 
    } 

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

答えて

3

問題がonTap(GeoPoint p, MapView mapView)をオーバーライド/実装することにより、あなたは通常onTap(int index)を呼ぶことになる自体ランニングからそのメソッドのItemizedOverlayの独自の実装を妨げているということです。

あなたはより多くの

public boolean onTap(GeoPoint p, MapView mapView){ 
    if (super.onTap(p, mapView)) 
     return true; 

    locations.add(new OverlayItem(p, "Point 3", "Point 3")); 
    populate(); 
    return false; 
} 

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

...のようなものができます希望をしたいです。

+0

ブリリアント。だからここに私が得ているもの: ItemizedOverlayはフラグの小さな画像のオーバーレイですが、クラスIはマップ全体を覆い隠すように定義しました。 したがって、ユーザーがタップすると、AndroidはItemizedOverlayのどこかでタップしたかどうかを最初に確認します(途中で、super(onTap)ではなくsuper.onTapです)。他のonTapメソッド(ダイアログボックス)を使用し、そうでなければ新しいフラグを作成します。 –

+0

私がまだ持っている1つの質問です:以前は、私がフラグをタップした場合、ダイアログボックスが表示されず、その代わりに新しいフラグが作成されます。ダイアログボックスをポップアップする方法がオーバーライドされたためだと思っていましたが、まだフレームワーク内にあるようです。もうそれをなくすために何が起こっているのかをもう少し詳しく説明できますか?また、ユーザーがフラグをタップした場合、super.onTap(p、mapView)がtrueを返す理由を理解できません。 ありがとう! –

+0

onTap(GeoPoint p、MapView mapView)は、「Overlay」で宣言され、タッチイベントに応答してMapViewによって呼び出されるメソッドです。 'ItemizedOverlay'のこのメソッドの実装には、指定された' GeoPoint'を既存の 'OverlayItem'にマップするロジックが含まれています。 'OverlayItem'が見つかった場合、それはあなたの' onTap(int index) '実装を呼び出し、それが返すものを返します。項目を見つけることができない場合、falseを返します。したがって、 'onTap(int index)'からtrueを返すことで、 'onTap(GeoPoint p、MapView mapView)'実装で追加される新しい項目を停止します。希望は意味をなさない。 – tomtheguvnor

関連する問題