2013-05-11 8 views
9

Android için bir Google Haritalar ile bir uygulama yapıyorum. Ekranımda çok sayıda Marker var ve tıklandıklarında her işaretleyici için özelleştirilebilir balon hazırlıyorum. Bu, tıklanan işaretçiye göre farklı olan bilgilerim var demektir.Android için Google Haritalar v2'de hangi Marker’ın tıklandığı nasıl bilinir?

İşaretin Görünümünün içeriklerini setInfoWindowAdapter ile ayarladıktan sonra getInfoContents yöntemini geçersiz kıldım.

Sorun şu şekildedir: Bu yöntem, Bilgi Penceresinin içeriğinin genel olarak uygulanmasıdır, ancak her bir işaretçi kendi bilgilerini göstermelidir. Yani, anlayabildiğim kadarıyla, veri yapılarımdan bilgi penceresine sunmak için gerekli bilgileri yüklemek için işaretleyicilerin hangi tıklatıldığı getInfoContents (Marker marker) üzerinde bir şekilde tespit etmek zorundayım. Soru şu: Tıklanan Marker'ın işaretçisinin neyi temsil ettiğini nasıl tanımlarım? Sadece bilgi penceresini göstermek için tetiklenen getInfoContents üzerindeki Marker nesnesine sahip olmak, görüntülenecek uygun bilginin hangisi olduğunu nasıl algılayabilirim? Dize Başlığı marker.getTitle() kullanarak karşılaştırmakla birlikte, ancak bu, istemediğim bilgi penceresindeki bir Başlığı göstermemi zorunlu kılıyor. Ayrıca bir marker.getId() vardır, ancak API tarafından bu tür bir kimlik oluşturulur ve bunu denetleyemiyorum

Herhangi bir fikir var mı? Eğer bunu kullanabilir ve sürece herhangi subview bir getInfoContents itibaren View değil setText dönmek şekilde ayarlanmış halde olduğunda başlığını göstermek zorunda değildir

@Override 
    public void onInfoWindowClick(final Marker marker) 
    { 
     // TODO Auto-generated method stub 
     if (marker.getTitle().equalsIgnoreCase("Start")) { 
     Toast.makeText(showMaps.this, "You have click on start -->", 
       Toast.LENGTH_LONG).show(); 
     Log.e("marker.getPosition()-->", "" + marker.getPosition()); 
     } 
    } 

cevap

0

bu kodu deneyin Bu View, başlık değeriyle döndü.

Tüm işaretleyicilere referansları nasıl ve nasıl devam ettirdiğinize bağlı olarak alternatifler vardır, örn. List<Marker> policeMarkers ve List<Marker> badGuysMarkers varsa, koşullu bir if (policeMarkers.contains(marker)) { ... } else { ... } kullanabilirsiniz.

Ayrıca bir Map<Marker, YourMarkerRelatedDataModel> allMarkers ve YourMarkerRelatedDataModel model = allMarkers.get(marker); yapabilir ve ayırt etmek için bu değeri kullanabilirsiniz.

Son olarak size belirteçler yakın modelinizi tutmak ve Map<Marker, Model> gibi şeyler yaratmak değil Marker.setData(Object) ve Object Marker.getData() gibi fonksiyonlar ekleyen Android Maps Extensions kullanabilirsiniz. Şuna yanıt olarak

3

:

18

:

soru şudur: Nasıl tıklandığında İşareti 'işaretleyici' neyi temsil varlık tanımlarım? [...] Orada da bir marker.getId(), ama böyle ID API tarafından oluşturulan ve bunu

Onu kontrol edebilirsiniz kontrol edemez. İşaretçi addMarker() tarafından döndürülür, böylece kimliğini alabilir ve saklayabilirsiniz. İşte kod şu kod:

...Eğer haritaya işaretleyici eklediğinizde işaretleyici tıklandığında

MarkerOptions mo = new MarkerOptions() 
.icon(BitmapDescriptorFactory.fromResource(R.drawable.my_marker)) 
.position(new LatLng(mLat, mLon)) 
.flat(true) 
.snippet("Click here for details") 
.rotation(0) 
.title(title); 

, bu

gibi "myObject" nin kimliği kurtarabilirsiniz,

Marker mkr = map.addMarker(mo); 
mMarkers.put(mkr.getId(), myObject.getId()); 

Sonra kabın üzerindeki kimliğini saklamak

map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() { 
    public void onInfoWindowClick(Marker marker) { 
     int id = mMarkers.get(marker.getId()); 
     // Do stuff with the id       
    } 
}); 
+0

.. 1 – Pihu

0

daha iyi bir seçenek vardır ve bu google da anlaşılacağı budur:

Etiket: İşaretleyici ile ilişkili bir Object. Örneğin, Object işaretleyicinin neyi temsil ettiği hakkında veri içerebilir. Bu, ayrı bir Map<Marker, Object> depolamaktan daha kolaydır. Başka bir örnek olarak, bir veri kümesinden kimliğe karşılık gelen String kimliğini ilişkilendirebilirsiniz. Google Maps Android API, bu mülkü ne okuyor ne de yazıyor.

Source

Yani böyle bir şey yapabilirsiniz:

O benim durumumda çalışır
for (ListItem it: mList) { 
    Marker mk = mMap.addMarker(new MarkerOptions().position(it.getLatLng()).title(it.getName()).snippet(it.getAddress())); 
    mk.setTag(it.getID()); 
} 

mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 
    @Override 
    public boolean onMarkerClick(Marker marker) { 
     Integer id = (Integer) marker.getTag(); 
     return false; 
    } 
}); 
İlgili konular