2015-09-22 6 views
7

का उपयोग कर रहा अद्यतन कोशिश कर रहा हूँ सर्वर से नए डेटा के साथ अपने नक्शे लेकिन मैं समझ नहीं पुराने आइटम (मार्करों और क्लस्टर - ClusterManager का उपयोग करते हुए) को निकालने का तरीका नक्शे से (। - मैं BroadcastReceiver जो आशय मिलता है जब वहाँ नए डेटा कर रहे हैं मैं कुछ इस तरह की कोशिश कर रहा था कि मैं केवल ClusterManager में जोड़ सकते हैं मुझे लगता हैकैसे मानचित्र पर अद्यतन मार्करों जब ClusterManager

: (लेकिन यह साथ लाइन पर मुझे देता है UnsupportedOperationException "..। .getMarkers() स्पष्ट(); "

I मानचित्र को के साथ जोड़ने के लिए डेटा जोड़ा गया।

java.util.Collection<Marker> userCollection = mClusterManager.getMarkerCollection().getMarkers(); 
      ArrayList<Marker> userList = new ArrayList<Marker>(userCollection); 
      // now is userList empty 
      for(Marker marker: userList){ 
       marker.remove(); 
      } 

      java.util.Collection<Marker> userCollection2 = mClusterManager.getClusterMarkerCollection().getMarkers(); 
      ArrayList<Marker> userList2 = new ArrayList<Marker>(userCollection2); 
      // now is userList2 empty 
      for(Marker marker: userList2){ 
       marker.remove(); 
      } 

      mClusterManager.addItems(LocationGetter.getReports()); 
+0

मैंने यहां विधि का उपयोग किया है यदि आपको खाली 'ऐरेलिस्ट' मिलता है, तो सुनिश्चित करें कि आपके पास सही 'क्लस्टर मैनेजर' और 'मार्करकोलेक्शन() 'है। – bjiang

उत्तर

5

मैं ClusterManager पर पूरे समय ध्यान केंद्रित किया गया था, तो मैं GoogleMapबारे में भूल गया, और विशेष रूप से विधि clear()। मैं इस कोड के साथ समस्या को हल करने में सक्षम था:

mGoogleMap.clear(); 
mClusterManager.clearItems(); // calling just in case (may not be needed) 
mClusterManager.addItems(LocationGetter.getReports()); 
+1

मेरे लिए यह पर्याप्त नहीं था। मैं बहुत सारी वस्तुओं को हटा रहा था और जोड़ रहा था। ऑपरेशन समाप्त होने के बाद इसे कॉल करना गायब ताज़ा करने की मेरी समस्या हल हो गई: mClusterManager.cluster(); - शायद यह किसी की मदद करता है। – plexus

+0

@plexus के रूप में क्लस्टर को कॉल करने के लिए क्लस्टर() को कॉल करने की आवश्यकता है। और सावधान रहें।)() क्योंकि सही तरीके से अपडेट करने के लिए आपको कई बार ज़ूम इन/आउट करने की आवश्यकता है। – lujop

6

ClusterManagerdocumentation के अनुसार, हम mClusterManager.cluster();

इस विधि का उपयोग कर सकते एक फिर से क्लस्टर बाध्य करें। नई आइटम जोड़ने के बाद आप इसे कॉल करना चाह सकते हैं।

1

किसी भी एपीआई को यह सूचित करने के लिए कोई एपीआई नहीं है कि क्लस्टर आइटम अपडेट किया गया है। लेकिन आप किसी आइटम को अपडेट करने के लिए clusterManager.removeItem() + clusterManager.addItem() का उपयोग कर सकते हैं।

लेकिन तुम, सावधान रहना चाहिए जैसा कि आप सामान्य रूप से, क्योंकि यह कुछ गुण है कि प्रतिपादन प्रभावित आप एक कस्टम ClusterRenderer है कि इस का समर्थन करता है और onClusterItemRendered() और/या onClusterRendered() ओवरराइड करता है उपयोग करने की आवश्यकता बदल गया है एक आइटम अद्यतन करना चाहते। पहले से भिन्न रूपों का उपयोग करना काम नहीं करेगा क्योंकि उन्हें केवल मार्कर निर्माण पर ही बुलाया जाता है।

आप इस GitHub मुद्दे पर देख सकते हैं GitHub issue

1

के बाद से मेरे ऐप समूहों कई बार अद्यतन करने के लिए के बाद नक्शा बनाया है की जरूरत है, मैं इस कार्यप्रवाह सबसे अच्छा समाधान के रूप में हटाने और नए समूहों को जोड़ने के लिए मिला:

mGoogleMap.clear(); 
mClusterManager.clear(); 
//Do work to add items to cluster 
mClusterManager.addItems(yourItemsList); 
//Finally 
mClusterManager.cluster(); 

इससे क्लस्टर को सामग्री को संशोधित करने के बाद पुन: प्रस्तुत करना चाहिए।

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