2012-06-28 15 views
5

पर क्लिक इवेंट श्रोता जोड़ें जोड़ना मुझे बिंग मैप्स में EntityClickedListener के साथ समस्या हो रही है। मैं इसे दिए गए उदाहरण निम्न कोडेड:पुशपिन

map.setEntityClickedListener(new EntityClickedListener() 
{ 
    @Override 
    public void onAvailableChecked(String layerName, int entityId) 
    { 
     HashMap<String, Object> metadata = map.getLayerManager.GetMetadataByID(layerName, entityId); 
     Toast.makeText(Activity.this, metadata.toString(), Toast.LENGTH_LONG) 
      .show(); 
    } 
}); 

हालांकि, Pushpin पर क्लिक कुछ नहीं करता है। मैंने मेटाडेटा में वास्तव में क्या देखने के लिए टोस्ट संदेश बनाया लेकिन कुछ भी नहीं हुआ। पथ के माध्यम से आवेदन देखते हुए, मैं बता सकता है कि बिंग एक डेटा सेवा को पुन: प्राप्त करने के लिए अपनी जानकारी का उपयोग करता:

bsds.FindByAreaCompleted = new Handler(){ 
    public void handleMessage(Message msg) { 
    if(msg.obj != null){ 
     Record[] records = (Record[])msg.obj; 
     EntityLayer el = (EntityLayer)bingMapsView.getLayerManager().getLayerByName(Constants.DataLayers.Search); 
     double maxLat = -90, minLat = 90, maxLon = -180, minLon = 180; 

     for(Record r : records){ 
      Pushpin p = new Pushpin(r.Location); 
      p.Title = r.DisplayName; 
      HashMap<String, Object> metadata = new HashMap<String, Object>(); 
      metadata.put("record", r); 
      el.add(p, metadata); 
     } 

    bingMapsView.setMapView(new LocationRect(maxLat, maxLon, minLat, minLon)); 

    el.updateLayer(); 
    } 
}; 

मैं भी JavaScript फ़ाइल संपादित कर लिया है कुछ चेकिंग कि काम करने से Listener रोक सकती है दूर करने के लिए:

this.ShowInfobox = function(entity){ 
     window.BingMapsInterlop.entityClicked(entity.layerName, entityId); 
    }; 

var Layer = function(name, map, dataLayer) 
{ 
    this.Name = name; 

    var entities = new MM.EntityCollection(), 
    _map = map; 

    this.AddEntities = function(data) 
    { 
     if(data != null) 
     { 
      var i = data.length - 1; 
      if (i >= 0) 
      { 
       do 
       { 
        data[i].Entity.entityId = data[i].EntityId; 
        data[i].Entity.layerName = name; 

        // Commented out 
        // if(data[i].title != null && data[i].title != undefined && data[i].title != '') 
        // { 
         data[i].Entity.title = data[i].title; 

         MM.Events.addHandler(data[i].Entity, 'click', function(e) 
         { 
          BingMapsAndroid.ShowInfobox(e.target); 
         }); 
        // } 
        entities.push(data[i].Entity); 
       } 
       while (i--) 
      } 
     } 
    }; 
    // fluff 
}; 

क्या मैंने जावास्क्रिप्ट फ़ाइल को सही ढंग से संपादित किया है? मुझे खुद जावास्क्रिप्ट नहीं पता है और मैं this guide का पालन कर रहा हूं। Pushpin जोड़ा जा रहा है और मैं अपने BingMapsView पर देख रहा हूं, लेकिन OnClick विधि निष्पादित नहीं होती है। क्या मुझे कुछ याद आ रही है?

बिंग जो श्रोताओं को बनाने के लिए लेता है Pushpin के लिए घटनाओं पर क्लिक करें मेरी राय में घटनाएं लगभग भूलभुलैया है। ऐसा करने का एक आसान तरीका होना चाहिए कि मैं याद कर रहा हूं। क्या कोई सलाह दे सकता है?

+0

यह देखने की समस्या हो सकती है ओवरले –

+0

क्या किसी के पास बिंग मैप्स के लिए 'EntityClickListener' का कोड कोड है? यदि आप मुझे कुछ कोड दे सकते हैं तो मैं इसे स्वयं समझने की कोशिश कर सकता हूं। मैं पिछले कुछ हफ्तों से इस पर अपने बालों को फाड़ रहा हूं। –

+0

हाय @Yawus, क्या आपने इस लिंक को आजमाया है, http://bingmapsandroidsdk.codeplex.com/discussions/263960/ –

उत्तर

2

मुझे अंत में जवाब मिल गया है! जावास्क्रिप्ट फ़ाइल में निम्न विधियों को संपादित करें जैसे कि स्क्रिप्ट मेटाडेटा की जांच नहीं करता है जो मौजूद नहीं है।

var Layer = function(name, map, dataLayer) 
{ 
    this.Name = name; 

    var entities = new MM.EntityCollection(), 
    _map = map; 

    this.AddEntities = function(data) 
    { 
     if(data != null) 
     { 
      var i = data.length - 1; 
      if (i >= 0) 
      { 
       do 
       { 
        data[i].Entity.entityId = data[i].EntityId; 
        data[i].Entity.layerName = name; 

        // Commented out 
        // if(data[i].title != null && data[i].title != undefined && data[i].title != '') 
        // { 
         data[i].Entity.title = data[i].title; 

         MM.Events.addHandler(data[i].Entity, 'click', function(e) 
         { 
          BingMapsAndroid.ShowInfobox(e.target); 
         }); 
        // } 
        entities.push(data[i].Entity); 
       } 
       while (i--) 
      } 
     } 
    }; 
    // fluff 
}; 

फिर, JavaScript फ़ाइल में ShowInfoBox विधि

this.ShowInfobox = function (entity) { 
     window.BingMapsInterlop.entityClicked(entity.layerName, entity.entityId); 
    }; 

इस कोड फ़नल से सीधे क्लिक श्रोता आप कोड के लिए अपने Activity में बजाय जावास्क्रिप्ट में इसके साथ चारों ओर खिलवाड़ की बदल जाते हैं। पहले संपादित किए गए जावास्क्रिप्ट से अंतर यह है कि entityClicked विधि के पैरामीटर वास्तव में entity.entityIdentityId नहीं होना चाहिए।