18

これを達成するにonMarkerClickは、クリックされたマーカーのinfoWindowがすでに開いているかどうかをオーバーライドして確認するだけでよいと思いますが、驚いたことにclickedMarker.isInfoWindowShown()常にfalseを返します...

私のコード:

@Override
public boolean onMarkerClick(final Marker clickedMarker) {
    if(clickedMarker.isInfoWindowShown()) {
        clickedMarker.hideInfoWindow();
        System.out.println("was showing");
    } else {
        clickedMarker.showInfoWindow();
        System.out.println("not showing");
    }
}

infoWindow が「表示されていません」と常に言われますが、これは正しくありません... の参照を保持することでこれを回避できますが、userLastClickedMarker上記のどこで間違ったかを知りたいです。

ありがとう!

編集:

この問題をデバッグするためにコードを変更しました。

    System.out.println(clickedMarker.isInfoWindowShown());
    if(clickedMarker.isInfoWindowShown()) {
        clickedMarker.hideInfoWindow();
        System.out.println(" showing");
    } else {
        clickedMarker.showInfoWindow();
        System.out.println("not showing");
    }
    System.out.println(clickedMarker.isInfoWindowShown());

onMarkerClick メソッドで正しく動作することがわかりましたisInfoWindowShown()が、正しく「記憶」されません。そして、これはすでに誰かによってバグとして指摘されていることがわかりました...

https://code.google.com/p/gmaps-api-issues/issues/detail?id=5408

4

5 に答える 5

0

ドキュメントによると、それは正しいです:

情報ウィンドウを使用すると、ユーザーがマーカーをタップしたときに情報を表示できます。一度に表示される情報ウィンドウは 1 つだけです。ユーザーが別のマーカーをクリックすると、現在の情報ウィンドウが非表示になり、新しい情報ウィンドウが表示されます。

使用上の観点からはバグと見なすことができます。

@Override
public boolean onMarkerClick(Marker marker)

ビジネスロジックから、これはmarker.isInfoWindowShown()関数を呼び出すのに適切な場所ではありません。これは、想定どおりに常に false であるためです。OnMarkerClickListener がこの関数を呼び出すと、開かInfoWindowれているものはすべて Map フレームワーク自体によって既に非表示になっています (技術的にはステータス「false」が正しい)。

オーバーライドされたonMarkerClickメソッドをInfoWindows偶数クリックでのみ開くように変更する例で確認できます。奇妙なクリックでは、何もInfoWindowsせず、明示的な呼び出しなしでフレームワークによって自動的に閉じられmarker.hideInfoWindow()ます。

実際のInfoWindowステータスを取得marker.isInfoWindowShownするには、マップ上の任意のマーカーへのローカル参照を保持して、別のイベントまたは関数から呼び出す必要があります。

于 2015-09-29T14:54:22.817 に答える
0

私の場合、Googleウィンドウ情報に自分のウィンドウ情報を表示しています。

私の窓情報

また、ユーザーが map,buttons などの他の場所をクリックするたびに、Google ウィンドウ情報を非表示にする必要がありました。

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    Marker lastMarkerClicked = modelManager.getLastMarkerClicked();
    if(lastMarkerClicked!=null){
        lastMarkerClicked.hideInfoWindow();
    }
    super.onWindowFocusChanged(hasFocus);
}

しかし、私の機能の 1 つは map のスクリーンショットを共有することであり、スクリーンショット機能にはウィンドウ情報が必要であるため、Google ウィンドウ情報も必要です。

(これを機能させるには、ポップアップ ウィンドウがフォーカスを失う必要があるため、その focusable プロパティを true に設定する必要があります)

于 2017-06-14T10:11:32.473 に答える