InfoWindow 單擊偵聽器
以下是如何為每個 Marker 的 InfoWindow 點選事件定義不同操作的示例。
使用標記 ID 為鍵的 HashMap,該值是單擊 InfoWindow 時應採取的相應操作。
然後,使用 OnInfoWindowClickListener
來處理使用者單擊 InfoWindow 的事件,並使用 HashMap 來確定要採取的操作。
在這個簡單的例子中,我們將根據單擊 Marker 的 InfoWindow 開啟一個不同的 Activity。
將 HashMap 宣告為 Activity 或 Fragment 的例項變數:
//Declare HashMap to store mapping of marker to Activity
HashMap<String, String> markerMap = new HashMap<String, String>();
然後,每次新增標記時,在 HashMap 中使用標記 ID 建立一個條目,並在單擊 InfoWindow 時執行該操作。
例如,新增兩個標記並定義要為每個標記採取的操作:
Marker markerOne = googleMap.addMarker(new MarkerOptions().position(latLng1)
.title("Marker One")
.snippet("This is Marker One");
String idOne = markerOne.getId();
markerMap.put(idOne, "action_one");
Marker markerTwo = googleMap.addMarker(new MarkerOptions().position(latLng2)
.title("Marker Two")
.snippet("This is Marker Two");
String idTwo = markerTwo.getId();
markerMap.put(idTwo, "action_two");
在 InfoWindow 單擊偵聽器中,從 HashMap 獲取操作,並根據 Marker 的操作開啟相應的 Activity:
mGoogleMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
String actionId = markerMap.get(marker.getId());
if (actionId.equals("action_one")) {
Intent i = new Intent(MainActivity.this, ActivityOne.class);
startActivity(i);
} else if (actionId.equals("action_two")) {
Intent i = new Intent(MainActivity.this, ActivityTwo.class);
startActivity(i);
}
}
});
注意如果程式碼位於片段中,請使用 getActivity()
替換 MainActivity.this。