2012-12-27 20 views
27

मेरे ऐप में मेरे पास कुछ ऑब्जेक्ट्स हैं जिनके स्थान मार्करों का उपयोग करके मानचित्र पर प्रदर्शित होते हैं। समस्या एक ही रास्ता मैं मार्कर क्लिक्स को संभालने के लिए मिल गया हैमार्कर के साथ एक ऑब्जेक्ट संबद्ध करें (google map v2)

googleMap.setOnMarkerClickListener(new ... { 
    @Override 
    public void onMarkerClick(Marker marker) { 
     // how to get the object associated to marker??? 
    } 
}) 

दूसरे शब्दों में, जबकि केवल इंटरफ़ेस मैं कि मुझे सिर्फ MarkerOptions स्थापित करने के लिए अनुमति देता है मैं मार्कर वस्तु प्राप्त है।

मार्कर को किसी ऑब्जेक्ट से जोड़ने का कोई तरीका?

उत्तर

24

आप

Marker amarker = mMap.addMarker(new MarkerOptions().position(lat, lng).title("Hello World")); 
amarker.setTag(new SomeData()); 

का उपयोग कर Marker के setTag() विधि मार्कर के साथ जुड़े डेटा पुनः प्राप्त करने के लिए द्वारा मनमाने ढंग से वस्तु संबद्ध कर सकते हैं, तो आप बस इसे अपनी getTag() का उपयोग कर पढ़ सकते हैं और तब अपने मूल प्रकार में डाली।

SomeData adata = (SomeData) amarker.getTag(); 

More information

+0

यह सही समाधान है। मार्कर में टैग के बारे में दस्तावेज़ीकरण के अनुसार: "मार्कर से जुड़ा एक ऑब्जेक्ट। उदाहरण के लिए, ऑब्जेक्ट में मार्कर का प्रतिनिधित्व करने के बारे में डेटा हो सकता है। यह अलग नक्शा <मार्कर, ऑब्जेक्ट>।" – JDenais

+0

को सही समाधान के रूप में आसान है Play Services 9.4 – hibob

+0

यह सही समाधान है! –

54

मुझे लगता है कि एंड्रॉइड टीम द्वारा यह कॉलबैक बहुत अच्छी तरह से नहीं था, लेकिन, हमारे पास यही है।

जब भी आप mMap.addMarker(); पर कॉल करते हैं तो यह जेनरेट मार्कर लौटाता है। इसके बाद आप इसे याद रखने के लिए हैश मैप या कुछ अन्य डेटा धारक संरचना का उपयोग कर सकते हैं।

// Create the hash map on the beginning 
WeakHashMap <Marker, Object> haspMap = new WeakHashMap <Marker, Object>(); 


// whenever adding your marker 
Marker m = mMap.addMarker(new MarkerOptions().position(lat, lng).title("Hello World").icon(icon_bmp)); 
haspMap.put(m, your_data); 
+8

मेरा सुझाव है 'WeakHashMap', इसलिए जब एक' Marker' कचरा-एकत्र हो जाता है, तो होगा उसके संबंधित 'WeakHashMap' प्रवेश और' Object' मूल्य। लेकिन, हां, दुर्भाग्य से यह वर्तमान में एकमात्र विकल्प प्रतीत होता है। – CommonsWare

+1

मुझे समझ में आता है। मैंने अपना जवाब WeakHashMap होने के लिए संपादित किया। क्या वह ठीक है? – Budius

+0

यह सही दिखता है। – CommonsWare

8

एक और विकल्प एक मानचित्र बनाना होगा जिसका कुंजी marker.getId() है और मान हमारी वस्तु है।

इस तरह, हम स्मृति में मार्कर का संदर्भ नहीं रखेंगे, और कचरा एकत्रित मार्करों के बारे में चिंता करने की आवश्यकता नहीं होगी।

यहां आप more answers देख सकते हैं।