2012-06-28 20 views
5

Bing Haritalar'da EntityClickedListener ile sorun yaşıyorum. Ben Verilen örnekte aşağıdaki bunu kodlanmış:Tıklama Olayı Dinleyicisi'ni Pushpin'e Ekleme

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(); 
    } 
}); 

Ancak Pushpin tıklayarak şey yapmaz. Meta verilerde tam olarak ne olduğunu görmek için bir Tost mesajı oluşturdum ama hiçbir şey olmuyor. Ben de çalışmasını Listener engellemiş olabilir bazı kontroller kaldırmak için JavaScript dosyası kaydetmiştiniz

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(); 
    } 
}; 

: yolundan uygulama bakınca, Bing almak için onun bilgileri bir veri hizmeti kullandığını söyleyebilir

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 
}; 

JavaScript dosyasını doğru şekilde düzenledim mi? JavaScript'i kendim bilmiyorum ve this guide'u takip ediyorum. Pushpin ekleniyor ve BingMapsView üzerinde görüyorum, ancak OnClick yöntemi yürütülmez. Kaybettiğim bir şey mi var?

Bing, Dinleyici ve etkinlik oluşturmak için Pushpin tıklatma olayları oluşturmak için aldığım yol, düşünceme göre neredeyse bir labirenttir. Bunu yapmamın daha basit bir yolu olmalı. Herhangi bir tavsiye veren var mı?

+0

görüntü bozukluğuyla ilgili bir sorun olabilir –

+0

Bing Maps için "EntityClickListener" çalışma koduna sahip olan var mı? Eğer bana biraz kod verebilirsen, kendimi anlamaya çalışabilirim. Son birkaç haftadır saçlarımı yırttıyorum. –

+0

Merhaba @Yawus, bu bağlantıyı denediniz mi, http://bingmapsandroidsdk.codeplex.com/discussions/263960/ –

cevap

2

Sonunda cevabı buldum! JavaScript dosyasında aşağıdaki yöntemleri, komut dosyası mevcut olmayan meta verileri kontrol etmeyecek şekilde düzenleyin.

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 
}; 

Sonra JavaScript etrafında karıştırmasını yerine Activity düz tıklama dinleyici kod için

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

Bu kod hunileri için JavaScript dosyasındaki ShowInfoBox yöntemini değiştirmek. Daha önce düzenlediğim JavaScript I arasındaki fark, entityClicked yönteminin parametresinin, entityId değil entity.entityId olması gerektiğidir.

İlgili konular