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。