2015-06-17 78 views
1

我想要這樣做,以便當用戶在谷歌地圖中創建一個標記時,它可以被雙擊(或保持或某事),並提出一個新的活動。現在我擁有它,以便我手動在地圖上創建一個標記,並使用onMarkerClickListener等待直到點擊標記以啓動新的活動。基本上,我想這樣做是爲了讓我的應用程序中創建的所有標記共享此行爲,並且我需要某種檢查來區分我自己的用戶標記和Google /外部標記。如何永久更改應用程序標記的行爲?

這裏是下面的代碼:

public void setUsermarker() { 

    mMap.setOnMarkerClickListener(new OnMarkerClickListener() { 

     @Override 
     public boolean onMarkerClick(Marker marker) { 
      if (marker.equals(userMarker)) { //if clicked marker equals marker created by user 
       Intent intent = new Intent(MapsActivity.this, ObjectViewActivity.class); 
       startActivity(intent); 

      }  //Otherwise just show the info window 
      return false; 
     } 
    }); 
} 
+0

您可以刪除條件在'if(marker.equals(userMarker))'上,然後通過點擊任何標記來啓動ObjectViewActivity活動。 –

+0

我想過這個,但是不會影響外部標記嗎?例如。通過google默認放置在地圖上的那些。現在還不能完全檢查,因爲我的地圖在縮小時沒有重新加載拼貼... – retromode

+0

修復我的地圖(API密鑰隨機更改)後,我試用了你說的。它適用於我的「userMarkers」,但常規Google標記(例如美國國會大廈)未在地圖中註冊。所以我需要一些檢查來區分我自己的用戶標記和Google /外部標記。 – retromode

回答

1

您可以添加您明確,以便從地圖中的其他標記區分它們添加到地圖中Set<String>每個標記的ID。

文檔:https://developers.google.com/android/reference/com/google/android/gms/maps/model/Marker#getId()

//instance variables: 
    LatLng latLng; 
    String title; 
    String snippet; 
    Set<String> markerIDs = new HashSet<String>(); 

當添加在你的應用程序標記,捕獲返回的標記,獲得ID和ID添加到組:

//Adding your markers 
    Marker marker = mMap.addMarker(new MarkerOptions().position(latLng) 
      .title(title) 
      .snippet(snippet)); 

    //Add each ID to the Set 
    String id = marker.getId(); 
    markerIDs.add(id); 

然後,只需檢查如果在啓動其他活動之前標記ID在集合中:

public void setUsermarker() { 

     mMap.setOnMarkerClickListener(new OnMarkerClickListener() { 

      @Override 
      public boolean onMarkerClick(Marker marker) { 
       if (markerIDs.contains(marker.getId())) { //if clicked marker equals marker created by user 
        Intent intent = new Intent(MapsActivity.this, ObjectViewActivity.class); 
        startActivity(intent); 

       }  //Otherwise just show the info window 
       return false; 
      } 
     }); 
    } 
+0

太棒了,幫助了我,謝謝!關於代碼的一件事,Set markerIDs = new Set ();必須更改爲新的HashSet (); (或其他類型的集合,我只是選擇了一個HashSet),因爲你不能實例化Set類型,因爲它是一個接口。另外,就我而言,如果有人使用此代碼,他們應該確保他們正在爲.getId創建標記,因爲MarkerOptions沒有該方法。再次感謝! – retromode

+0

@retromode你讀了我的心!我剛剛意識到這一點,並且即將對HashSet進行更改。很高興它適合你! –