5

स्पर्श करने के बाद करता है, मैं वर्तमान में एक एकल मार्कर प्रदर्शित कर रहा हूं। जानकारी विंडो को छुआ जब प्रदर्शित नहीं होता है। मैंने पुष्टि की है कि शीर्षक वास्तव में मार्कर में सेट किया जा रहा है।मार्कर v2 जानकारी विंडो प्रदर्शित नहीं होती है जब मार्कर स्पर्श किया जाता है, लेकिन अदृश्य जानकारी विंडो

हालांकि, अगर मैं मार्कर के ऊपर वाले क्षेत्र को स्पर्श करता हूं जिसमें जानकारी विंडो होगी, तो मुझे OnInfoWindowClickListener ईवेंट प्राप्त होगा। जब ऐसा होता है तो मैं एक और गतिविधि खोलता हूं, और जब मैं इस गतिविधि से वापस आता हूं तो जानकारी विंडो प्रदर्शित होती है (असल में, मैं गतिविधि शुरू होने से पहले इसे विभाजित करने वाला दूसरा प्रदर्शित कर सकता हूं)।

मार्कर स्पर्श होने पर मुझे प्रदर्शित करने के लिए जानकारी विंडो कैसे प्राप्त कर सकता है इस पर कोई सुझाव?

यह मेरा प्रासंगिक कोड है: अगर मैं पाश मार्कर जानकारी विंडो प्रदर्शित करेगा के लिए अंदर m.showInfoWindow(); जोड़ने के लिए, भविष्य में हालांकि अभी भी बहुत सा मार्करों होंगे, इसलिए आवश्यकता है

// .... more code up here 


final GoogleMap map = mMapFragment.getMap(); 

if (map == null) { 
    mReloadWhenReady = true; 
    return; 
} 

map.clear(); 

final TileProviderMapsV2 prov = new TileProviderMapsV2(mMapFragment.getActivity()); 
map.addTileOverlay(new TileOverlayOptions().tileProvider(prov)); 


final LatLngBounds.Builder bounds = new LatLngBounds.Builder(); 
final Map<Marker, MyNode> markerMap = J.newHashMap(); 
mNodes.clear(); 
mNodes.addAll(nodes); 


L.p("Maps v2 nodes: %d. ", mNodes.size()); 



for (MyNode node : mNodes) { 
    final LatLng latlng = new LatLng(node.getLat(), node.getLon()); 
    final MarkerOptions opts = new MarkerOptions() 
      .position(latlng) 
      .title("Title is " + node.getName()) 
      .icon(BitmapDescriptorFactory 
      .fromResource(com.mydomain.droid.R.drawable.pin_blue)); 

    final Marker m = map.addMarker(opts); 
    markerMap.put(m, node); 
    bounds.include(latlng); 
} 

map.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() { 

    @Override 
    public void onInfoWindowClick(Marker marker) { 
     final MyNode node = markerMap.get(marker); 
     L.p("Maps v2 Clicked Node: %s/%d. ", node.getName(),node.getId()); 
     ViewNode.Launchr.setNodeId(node.getId()).launch(mMapFragment.getActivity()); 
    } 
}); 

मार्कर स्पर्श होने पर केवल जानकारी विंडो दिखाने के लिए।

डीबगिंग उद्देश्यों के लिए मैं निम्नलिखित कोड जोड़ा, और मैं सही शीर्षक के साथ साथ लॉग में दिखाई दे रही है, लेकिन मैं जानकारी विंडो नहीं मिल रहा है:

map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 

    @Override 
    public boolean onMarkerClick(Marker marker) { 
     L.p("marker clicked " + marker.getTitle()); 
     marker.showInfoWindow(); 
     return false; 
    } 
}); 

धन्यवाद!

+0

आप निर्धारित किया है अंदर कुछ कोड अपनी कक्षा में घोषित एक ' OnCameraChangeListener'? यदि हां, तो क्या आप अपना 'ऑन कैमरे चेंज' कोड पोस्ट कर सकते हैं? – antonio

उत्तर

0

यह करके देखें:

map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 

    @Override 
    public boolean onMarkerClick(Marker marker) { 
     marker = m; 
     L.p("marker clicked " + marker.getTitle()); 
     marker.showInfoWindow(); 
     return false; 
    } 
}); 
+0

'विधि showInfoWindow() मार्करऑप्शन के प्रकार के लिए अपरिभाषित है – zundi

+0

मेरा संपादित उत्तर –

+0

हाय हैम्मा, मैंने लूप में' showInfoWindow() 'जोड़ने के लिए आपके सुझाव के साथ मूल प्रश्न अपडेट किया है। यह जानकारी विंडो दिखाएगा, हालांकि मुझे मार्कर स्पर्श होने पर ही प्रदर्शित होने की आवश्यकता है (जो मार्कर का डिफ़ॉल्ट व्यवहार होना चाहिए)। – zundi

0

सुनिश्चित नहीं हैं कि आपको यह प्रतिपादन समस्या आ रही है लेकिन मैं आपको कुछ सुझाव है कि हो सकता है या इसे ठीक नहीं हो सकता है दे जा रहा हूँ।

सबसे पहले आपको उस ब्लॉक से छुटकारा पाना चाहिए जो नक्शा तैयार है और mReloadWhenReady ध्वज से छुटकारा पाता है। Google मानचित्र को प्रारंभ करने का सही तरीका आपके मानचित्र खंड से getMapAsync का उपयोग कर रहा है।

तो GoogleMap.OnInfoWindowClickListener और OnMapReadyCallback को अपनी कक्षा में कार्यान्वित करें और मानचित्र को प्रारंभ करने, सेटअप करने और उपयोग करने के लिए निम्न कार्य करें।

एक सदस्य नक्शा चर

private GoogleMap map = null; 

तो कहीं है कि नक्शे

mMapFragment.getMapAsync(this); 

तो लिखना प्रारंभ उन ओवरराइड तरीकों

@Override 
    public void onMapReady(GoogleMap googleMap) 
    { 
     //here you can be sure the map is initialized correctly 
     this.map = googleMap; 
     //here we set the info window listener 
     map.setOnInfoWindowClickListener(this); 
     setupMap() //your custom method for doing whatever you want to do with the map see below 
    } 

    //Do your stuff on onInfoWindowClick as usual 
    @Override 
    public void onInfoWindowClick(Marker marker) { 
     final MyNode node = markerMap.get(marker); 
     L.p("Maps v2 Clicked Node: %s/%d. ", node.getName(),node.getId()); 
     ViewNode.Launchr.setNodeId(node.getId()).launch(mMapFragment.getActivity()); 
    } 



private void setupMap() 
{ 

    map.clear(); 

    final TileProviderMapsV2 prov = new TileProviderMapsV2(mMapFragment.getActivity()); 
    map.addTileOverlay(new TileOverlayOptions().tileProvider(prov)); 


    final LatLngBounds.Builder bounds = new LatLngBounds.Builder(); 
    final Map<Marker, MyNode> markerMap = J.newHashMap(); 
    mNodes.clear(); 
    mNodes.addAll(nodes); 


    L.p("Maps v2 nodes: %d. ", mNodes.size()); 



    for (MyNode node : mNodes) { 
     final LatLng latlng = new LatLng(node.getLat(), node.getLon()); 
     final MarkerOptions opts = new MarkerOptions() 
       .position(latlng) 
       .title("Title is " + node.getName()) 
       .icon(BitmapDescriptorFactory 
       .fromResource(com.mydomain.droid.R.drawable.pin_blue)); 

     final Marker m = map.addMarker(opts); 
     markerMap.put(m, node); 
     bounds.include(latlng); 
} 
संबंधित मुद्दे