2015-10-01 5 views
8

मैं मानचित्र पर एंड्रॉइड क्लस्टरिंग उपयोगिता का उपयोग कर रहा हूं और क्लस्टरिंग लाइब्रेरी द्वारा प्रबंधित सभी मार्करों के लिए mClusterManager.setOnClusterItemClickListener() के साथ एक ऑनक्लिक श्रोता को सफलतापूर्वक लागू किया गया है।एंड्रॉइड क्लस्टर और मार्कर क्लिक

क्योंकि मैं भी कुछ मार्करों हमेशा unclustered होना चाहता हूँ, मैं भी कुछ मार्करों mClusterManager का उपयोग कर, लेकिन सीधे मानचित्र के mMap.addMarker(), इस तरह से मुझे यकीन है कि वे नक्शे पर क्लस्टर कभी नहीं कर रहे हैं रहा हूँ का उपयोग किए बिना जोड़ें।

मेरी समस्या यह है कि मैं उन मार्करों (हमेशा अनियंत्रित वाले) पर क्लिक को अवरुद्ध नहीं कर सकता क्योंकि मैंने पहले से ही क्लिक किए गए क्लस्टर के मार्करों को संभालने के लिए mMap.setOnMarkerClickListener (mClusterManager) का उपयोग किया है।

क्या क्लस्टरिंग लाइब्रेरी द्वारा नियंत्रित क्लिक किए गए क्लस्टर मार्करों और क्लिक किए गए मार्करों को सुनने का कोई तरीका है?

या क्लस्टर मैनेजर को कुछ मार्करों को क्लस्टर करने के लिए निर्दिष्ट करने का कोई तरीका नहीं है? इस मामले में मुझे उन अलग-अलग क्लिक श्रोता को संभालना नहीं होगा क्योंकि सभी मार्कर क्लस्टरिंग उपयोगिता का उपयोग करके दिखाए जाएंगे।

आप

उत्तर

14

आप एक नया MarkerManager कि आप ClusterManager निर्माता में पारित बना सकते हैं धन्यवाद। फिर MarkerManager#newCollection का उपयोग करके एक नया मार्कर संग्रह बनाएं और MarkerManager.Collection#addMarker विधि का उपयोग करके अपने सामान्य मार्कर मानचित्र पर जोड़ें।

फिर, mMap.setOnMarkerClickListener(mClusterManager) पर कॉल करने के बजाय, mMap.setOnMarkerClickListener(mMarkerManager) पर कॉल करें, और यह उचित श्रोताओं को आपके Marker ईवेंट को अग्रेषित करने में संभाल देगा। आपको MarkerManager.Collection#setOnMarkerClickListener(GoogleMap.OnMarkerClickListener markerClickListener) फ़ंक्शन के साथ सामान्य मार्करों के लिए अपना ऑनमार्कर क्लिक श्रोता सेट अप करने की भी आवश्यकता होगी।

कक्षाओं के साथ बातचीत करने के बारे में बेहतर विचार पाने के लिए MarkerManager और ClusterManager कक्षाओं के स्रोत को देखने की सलाह देते हैं।

+3

बिल्कुल सही यह काम कर रहा, THX। मार्कर मैनेजर लिंक को पढ़कर आपने वास्तव में मेरी मदद की, यह एक अच्छी सिफारिश है। –

5

Marker के लिए क्लिक ईवेंट प्राप्त करने का एक और तरीका OnClusterItemClickListener इंटरफ़ेस का उपयोग कर रहा है।

कॉल mClusterManager.setOnClusterItemClickListener(this); और अपने वर्ग को लागू OnClusterItemClickListener

फिर onClusterItemClick विधि के अंदर, आप ClusterItem जो मार्कर क्लिक किए गए है मिल जाएगा बनाने के लिए,

@Override 
public boolean onClusterItemClick(ClusterItem clusterItem) { 

    Toast.makeText(getActivity(), "Latitude " + clusterItem.getPosition().latitude, Toast.LENGTH_LONG).show(); 

    return true; 
} 
+1

यह आसान है। – dan

+1

लेकिन यदि आपके पास 'क्लस्टरइटम' से विस्तारित कक्षा है तो इसमें और विशेषताएँ नहीं हैं। उदाहरण के लिए 'आइकन', 'आईडी', ...। –

+0

@ श्री हाइड शायद आप सिस्टम को ट्रिक कर सकते हैं, यदि आपके पास डेटाबेस है तो लैट और एलएनजी नहीं बदलेगा और आप डेटा को उलट सकते हैं। मैं इसे अपने प्रोजेक्ट में लागू करूंगा। धन्यवाद @ अतुल! –

संबंधित मुद्दे