2013-06-17 8 views
15

यह प्राप्त करने के लिए मुझे लगता है कि मुझे बस onMarkerClick ओवरराइड करने की आवश्यकता है और जांचें कि क्लिक किए गए मार्कर की जानकारीविंडो पहले से ही खुली है, लेकिन मेरे आश्चर्य के लिए clickedMarker.isInfoWindowShown() हमेशा झूठी वापसी करता है। ..जानकारी छुपाएं जब मार्कर दूसरी बार क्लिक किया गया (Google मानचित्र एंड्रॉइड एपीआई वी 2)

मेरे कोड:

@Override 
public boolean onMarkerClick(final Marker clickedMarker) { 
    if(clickedMarker.isInfoWindowShown()) { 
     clickedMarker.hideInfoWindow(); 
     System.out.println("was showing"); 
    } else { 
     clickedMarker.showInfoWindow(); 
     System.out.println("not showing"); 
    } 
} 

यह हमेशा मुझसे कहता है infoWindow है "नहीं दिखा" जो सही नहीं है ... मैं चाहता हूँ मैं इस के आसपास userLastClickedMarker के संदर्भ रखकर प्राप्त कर सकते हैं लेकिन यह जानने के लिए कि मैंने ऊपर क्या गलत किया है।

धन्यवाद!

संपादित करें:

System.out.println(clickedMarker.isInfoWindowShown()); 
    if(clickedMarker.isInfoWindowShown()) { 
     clickedMarker.hideInfoWindow(); 
     System.out.println(" showing"); 
    } else { 
     clickedMarker.showInfoWindow(); 
     System.out.println("not showing"); 
    } 
    System.out.println(clickedMarker.isInfoWindowShown()); 

मैंने पाया कि isInfoWindowShown() onMarkerClick विधि में सही ढंग से काम करता है लेकिन इसे सही ढंग से नहीं 'याद' होगा:

मैं इस मुद्दे को डिबग करने के लिए मेरे कोड बदल दिया है। और मैं यह कोई पहले से ही द्वारा एक बग के रूप में बताया गया है ...

https://code.google.com/p/gmaps-api-issues/issues/detail?id=5408

+0

आप 'हैंडलर' का उपयोग करके अपने कोड को एक छोटी देरी के साथ कॉल करने का प्रयास कर सकते हैं। मैं 5048 जारी करने के लिए टिप्पणी के रूप में इस प्रश्न का एक लिंक डालने का भी सुझाव देता हूं। –

+0

क्या आपको कोई काम मिल गया था? मुझे एक ही मुद्दे का सामना करना पड़ रहा है। – Geek

+0

लिंक पर बग को तारांकित करना याद रखें, अगर आप इस पोस्ट तक पहुंचते हैं। – Poutrathor

उत्तर

-1

मैं इस शो/छिपाने infowindow के लिए इस कोड को बनाने पाया।

enter code here 

private boolean infoWindowIsShow = false; 
private Marker lastMarker; 

private class MarkerClickListener implements GoogleMap.OnMarkerClickListener { 
    @Override 
    public boolean onMarkerClick(Marker marker) { 

     //обработка выводить/не выводить инфовиндов 
     if(lastMarker == null){ 
      marker.showInfoWindow(); 
      lastMarker = marker; 
      infoWindowIsShow=true; 
     }else 
     if (marker.getId().equals(lastMarker.getId())) { 
      if (infoWindowIsShow) { 
       marker.hideInfoWindow(); 
       infoWindowIsShow = false; 
      } else { 
       marker.showInfoWindow(); 
       infoWindowIsShow = true; 
      } 
     } 
     else{ 
      //это щелчок по другому маркеру 
      if (infoWindowIsShow) {//если открыто инфовиндов предыдущего маркера, скрываем его 
       lastMarker.hideInfoWindow(); 
       //и отображаем для нового 
       marker.showInfoWindow(); 
       infoWindowIsShow = true; 
       lastMarker = marker; 
      } else { 
       marker.showInfoWindow(); 
       infoWindowIsShow = true; 
       lastMarker = marker; 
      } 
     } 
     return true; 
    } 
} 

mMap.setOnMarkerClickListener (नया मार्करक्लिक लिस्टनर());

0

प्रलेखन के अनुसार यह सही है:

एक जानकारी विंडो आप उपयोगकर्ता के लिए जानकारी प्रदर्शित करने के लिए जब वे एक मार्कर पर नल अनुमति देता है। एक समय में केवल एक जानकारी विंडो प्रदर्शित होती है। यदि उपयोगकर्ता किसी अन्य मार्कर पर क्लिक करता है, तो वर्तमान जानकारी विंडो छिपी जाएगी और नई जानकारी विंडो प्रदर्शित की जाएगी।

हम उपयोग परिप्रेक्ष्य से बग के रूप में विचार कर सकते हैं।

@Override 
public boolean onMarkerClick(Marker marker) 

व्यापार तर्क से यह उचित जगह है क्योंकि यह हमेशा गलत के रूप में माना जाता है marker.isInfoWindowShown() समारोह कॉल करने के लिए नहीं है। जब OnMarkerClickListener इस फ़ंक्शन को किसी भी खुले InfoWindow को कॉल फ्रेमवर्क द्वारा ही छुपाया गया है (इसलिए स्थिति 'झूठी' तकनीकी रूप से सही है)।

आप उदाहरण के लिए केवल विधि को संशोधित करने के लिए InfoWindows को केवल क्लिक्स पर खोलने के लिए संशोधित कर सकते हैं। अजीब cliks पर - कुछ भी नहीं और InfoWindowsmarker.hideInfoWindow() के लिए स्पष्ट कॉल के बिना स्वचालित रूप से ढांचे द्वारा बंद हो जाता है;

वास्तविक InfoWindow स्थिति प्राप्त करने के लिए आपको मानचित्र पर किसी भी मार्कर को स्थानीय संदर्भों को रखकर marker.isInfoWindowShown अन्य घटनाओं या कार्यों से कॉल करना चाहिए।

+0

जब मार्करक्लिक पर इस विधि को मार्कर कहा जाता है .isInfoWindowShown को किसी विशेष मार्कर पर बुलाया जाता है और तदनुसार जानकारी की स्थिति उस मार्कर के लिए दी जानी चाहिए। तो कैसे स्थिति 'झूठी' तकनीकी रूप से सही है मैं समझने में सक्षम नहीं हूँ। हालांकि इन्फ्लोविंडोक्लिक पर संभालने के बावजूद यह समस्या हल हो जाती है फिर भी यह अनसुलझा बनी हुई हैइन्फोइंडोशॉउन हमेशा झूठी क्यों लौटती है। – user2779311

+0

क्योंकि नक्शा फ्रेमवर्क पहले से ही InfoWindow को बंद कर देता है इससे पहले कि यह मार्करक्लिक विधि पर कॉल करे। – Arvis

+0

यह है कि क्यों हैइन्फोइंडोशॉउन हमेशा झूठा – user2779311

0

isInfoWindowShown हमेशा गलत है, इसलिए मैं बुनियादी तरीका

int mLastIndex = -1 

और

@Override 
public boolean onMarkerClick(Marker marker) { 
    int index = (int) marker.getTag(); 
    Log.i(TAG, "onMarkerClick: " + index); 
    if(lastIndex != index){ 
     marker.showInfoWindow(); 
     lastIndex = index; 
    }else{ 
     marker.hideInfoWindow(); 
     lastIndex = -1; 
    } 

    return true; 
} 
0

मेरे मामले में पर मैं गूगल विंडो जानकारी पर अपने ही विंडो जानकारी दिखा रहा का उपयोग कर जानकारी विंडो छुपाने के लिए,

My window info

और मुझे Google w को छिपाने की आवश्यकता थी किसी भी समय उपयोगकर्ता दूसरी जगह पर क्लिक करता है जैसे मानचित्र, बटन।

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    Marker lastMarkerClicked = modelManager.getLastMarkerClicked(); 
    if(lastMarkerClicked!=null){ 
     lastMarkerClicked.hideInfoWindow(); 
    } 
    super.onWindowFocusChanged(hasFocus); 
} 

लेकिन मैं यह भी Googles खिड़की जानकारी की आवश्यकता है क्योंकि मेरे विशेषताओं में से एक नक्शे के स्क्रीनशॉट साझा करने के लिए है, और खिड़की की जानकारी स्क्रीनशॉट सुविधा के लिए आवश्यक है।

(इस पॉपअप विंडो काम करने के लिए ध्यान केंद्रित खो चाहिए अपने फ़ोकस करने योग्य संपत्ति सही पर सेट किया तो किया जाना चाहिए)

0

मैं एक ही मुद्दा था और मैं एक वैश्विक बूलियन चर घोषित करने और अपने मूल्य स्विचन द्वारा एक सरल उपाय पाया जब उपयोगकर्ता मार्कर पर क्लिक करता है। यहां मेरा कोड है:

private boolean isInfoWindowShown = false; 

    map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 
     @Override 
     public boolean onMarkerClick(Marker marker) { 

      if (!isInfoWindowShown) { 

       marker.showInfoWindow(); 
       map.moveCamera(CameraUpdateFactory.newLatLng(marker.getPosition())); 
       isInfoWindowShown = true; 
      } else { 

       marker.hideInfoWindow(); 
       isInfoWindowShown = false; 
      } 

      return true; 
     } 
    }); 

आशा है कि इससे किसी की मदद मिलेगी।

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