特定のマーカーのonClickイベントを手動で(マーカーを物理的にタップせずに)呼び出す方法はありますか?
いいえ、ただし、onClickイベントをシミュレートできます。マーカーをクリックすると、次の2つのことが起こります。
上記は、2行のコードで実現できます。
marker.showInfoWindow();
map.animateCamera(CameraUpdateFactory.newLatLng(marker.getPosition()), 250, null);
これを試して 、
マップクラスからマーカークリックリスナーを実装します。
public class MapView extends FragmentActivity implements OnMarkerClickListener{}
次のようにonMarkerClickEventをオーバーライドします。
@Override
public boolean onMarkerClick(final Marker marker) {}
答えはいいえだ。特定のマーカーのonClick
を個別に設定することはできません。
ただし、Map.setOnMarkerClickListener(_)
を使用すると、そのようなすべてのイベントのリスナーを設定できます。マーカーがクリックされるたびに呼び出されるリスナーでmarker
オブジェクトを取得できるはずです。何らかの識別を使用して、これが希望する特定のマーカーであるかどうかを確認し、それに応じて行動することができます。識別は、そのマーカーに固有のプロパティのいずれかである可能性があり、title
が明白な選択です。ただし、任意のプロパティを使用してマーカーをフィルタリングできます。
[〜#〜] no [〜#〜]、マーカークリックイベントを(コードから)直接トリガーすることはできません。
mMap.setOnMarkerClickListener(...);
を使用するだけで、マーカーのクリックイベントを処理できます。
ただし、 WebView でマップを使用する場合は別の方法があるため、JavaScript
を使用してマーカークリックイベントをトリガーできます。
//In V2 version:
GEvent.trigger(markers[i], 'click');
//In V3 version:
google.maps.event.trigger(markers[i], 'click');
私はこれに偶然出くわし、答えに助けられませんでした。したがって、将来の読者のために-map.setOnMarkerClickListener(yourClickHandler)
を追加する場合、それは非常に簡単です。
yourClickHandler
からロジックを抽象化し、すべてのマーカーへの参照を保持します...つまり.
_private val markers = arrayListOf<Marker>()
_
マップにマーカーを追加する場合は常に、マーカーをmarkers
配列にも追加します。つまり何かのようなもの
_val marker = MarkerOptions().position(...).......
markers.add(map.addMarker(marker))
_
そして、yourClickHandler
は次のようになります
_val yourClickHandler = GoogleMap.OnMarkerClickListener {
markerClickHandler(marker = it)
return@OnMarkerClickListener false
}
_
これで、マップ上のマーカーを押すたびに、yourClickHandler
がmarkerClickHandler()
を呼び出し、そこで行うことはすべて発生します。また、プログラムでマーカーを押したくない場合は、そのマーカーをmarkerClickHandler
に渡すだけです。
マーカーのクリックをシミュレートできます。 MarkerManagerクラスから拡張するMyMarkerManagerクラスを作成します。
このクラスには、イベントをシミュレートするために手動で呼び出すことができる関数onMarkerClick()があります。
詳細については、このリンクを参照してください。 https://github.com/googlemaps/Android-maps-utils/blob/master/library/src/com/google/maps/Android/MarkerManager.Java