2017-06-21 67 views
1

我在代表某些商店位置的Google地圖活動中有一些標記。我需要爲每個標記寫入點擊事件,以便我可以爲每個商店打開相應的網站。我正在使用下面的代碼來添加標記。多個標記在Android地圖中點擊事件

public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 

    for(int i = 0 ; i < shop.size() ; i++) { 

     createMarker(shop.get(i).getLat(), shop.get(i).getLon(), shop.get(i).getShopname(),"", R.drawable.ic_location_city); 
    } 

    mMap.setOnMarkerClickListener(ShoppingPage.this); 


} 
protected Marker createMarker(double latitude, double longitude, String title, String snippet, int iconResID) { 
    mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latitude, longitude), 9f)); 

    myMarker = mMap.addMarker(new MarkerOptions() 
      .position(new LatLng(latitude, longitude)) 
      .anchor(0.5f, 0.5f) 
      .title(title) 
      .snippet(snippet) 
      .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_location_city_black_24dp))); 
    return myMarker; 

} 

當我試圖點擊監聽器添加到標記我無法添加點擊監聽到所有他們。我的只能點擊事件添加到最後添加的標記。但我需要爲地圖中的每個標記點擊事件。請幫幫我。這是我點擊事件的代碼。

public boolean onMarkerClick(final Marker marker) { 
    if (marker.equals(myMarker)) 
    { 
     //handle click here 
     Log.d("title",""+ marker.getTitle()); 
     Log.d("position",""+ marker.getPosition()); 
    } 
    return true; 
} 
+0

您可以爲每個標記添加點擊事件。你怎麼了? – user1209216

+0

我不知道如何爲每個標記添加點擊事件。與我目前的代碼只有最後添加標記給點擊響應。 – Ankit

回答

1

使用此:

首先讓你的應用程序來實現GoogleMap.OnMarkerClickListener然後創建一個標誌器陣列:

Marker[] marker = new Marker[20]; //change length of array according to you 

然後裏面

onMapReady(){ 
    mMap.setOnMarkerClickListener(this); 
for(int i = 0 ; i < shop.size() ; i++) { 
     marker[i] = createMarker(shop.get(i).getLat(), shop.get(i).getLon(), shop.get(i).getShopname(),"", R.drawable.ic_location_city); 
    } 

然後最後

@Override 
    public boolean onMarkerClick(Marker marker) { 
    //you can get assests of the clicked marker 
    return false; 
} 

希望它有幫助!

+0

謝謝。它的工作 – Ankit

1

在onMarkerClick(...), 「如果(marker.equals(myMarker))」 意味着onMarkerClick只做了myMarker什麼。
myMarker引用最後創建的標記,因爲每次調用createMarker時它都會被覆蓋。 所以建議是刪除 「如果(marker.equals(myMarker))」

0

這是錯誤的:

public boolean onMarkerClick(final Marker marker) { 
    if (marker.equals(myMarker)) 
    { 
     //handle click here 
     Log.d("title",""+ marker.getTitle()); 
     Log.d("position",""+ marker.getPosition()); 
    } 
    return true; 
} 

它應該是:

public boolean onMarkerClick(final Marker marker) { 

    return true; 
} 

而且變量指示單擊了哪個標記。順便提一下,你的問題是毫無意義的,如果你發現你錯了,那麼你可以先設置斷點,並對所有標記做出響應。

另外,我想preffer財產以後這樣的:

googleMap.setOnMarkerClickListener(marker -> 
{ 
    /*Do what you need with clicked marker*/ 
    return true; 
}); 
0

給每個標記的OnClickListener

.setOnClickListener(getOnClickAction()); 

而不是一個OnClickListener處理該點擊。

View.OnClickListener getOnClickAction(){ 
     return new View.OnClickListener(){ 
      public void onClick(View v){ 
       //Handle Click 
       v.getTitle(position); 
      } 
     }; 
    }