0

MapActivityのonTap関数は、マップをクリックした要素に関係なく、常に0を返します。これはonTap関数です。

@Override
protected boolean onTap(int i) {

    OverlayItem item = myOverlays.get(i);
    AlertDialog.Builder dialog = new AlertDialog.Builder(context);

    dialog.setTitle(item.getTitle());
    dialog.show();

    return true;
}

//myOverlays is a ArrayList<OverlayItem>

でも。関数が実行されるたびに、インデックス(i)は常に0です。ブレークポイントとログデバッグの両方を使用してこれを確認しました。この関数を使用している間、正しいダイアログの内容を受け取っているので、これは私をかなり当惑させます。

item.getTitle()は、クリックされた要素に適切なタイトルを取得します。これは、item-objectが正しいことを意味します。つまり、インデックス(i)が常に0であっても、 myOverlays.get(i)は何らかの方法でさまざまなオブジェクトを取得できます。気が遠くなるようなです。

誰かが私を啓発する気がありますか?これは、「クリック」がエミュレーターで実行されるという事実に関連する問題である可能性があると思いますか?

前もって感謝します。クリス

4

1 に答える 1

1

オーバーレイを作成してアイテムを追加するコードを表示していないため、これは単なる推測です。

おそらくItemizedOverlays、各オーバーレイに複数の1つのアイテムを追加している可能性があります。何かのようなもの:

for(i=0; i<count; i++){
  MyItemizedOverlay itemizedOverlay = new MyItemizedOverlay(...);
  OverlayItem oi = new OverlayItem(...);
  itemizedOverlay.add(oi);
  mapView.getOverlays().add(itemizedOverlay);
}

上記のコードを使用すると、複数のオーバーレイが作成され、それぞれが位置0に1つのアイテムを持ちます。

効率を上げるには、次のようなことを行う必要があります。

MyItemizedOverlay itemizedOverlay = new MyItemizedOverlay(...);
for(i=0; i<count; i++){
  OverlayItem oi = new OverlayItem(...);
  itemizedOverlay.add(oi);
}
mapView.getOverlays().add(itemizedOverlay);

上記のコードでは、複数のアイテムを含むオーバーレイは1つだけになります。

よろしく。

于 2012-11-12T22:07:21.497 に答える