Sto riscontrando problemi con lo EntityClickedListener
in Bing Maps. Ho codificato seguendo l'esempio dato:Aggiunta del listener di eventi Click a Pushpin
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();
}
});
Tuttavia, cliccando sul il Pushpin
non fa nulla. Ho creato un messaggio Toast per vedere esattamente cosa c'è nei metadati, ma non succede nulla. Guardando attraverso il percorso dell'applicazione, posso dire che Bing utilizza un servizio di dati per recuperare le proprie informazioni:
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();
}
};
Ho anche modificato il file JavaScript per rimuovere alcuni controlli che possono aver impedito l'Listener
di lavorare:
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
};
Ho modificato correttamente il file JavaScript? Non conosco JavaScript me stesso e ho seguito this guide. È stato aggiunto il Pushpin
e sto vedendo il mio BingMapsView
, ma il metodo OnClick
non viene eseguito. C'è qualcosa che mi manca?
Il percorso che Bing impiega per creare ascoltatori ed eventi per gli eventi di clic Pushpin
è quasi un labirinto a mio parere. Ci deve essere un modo più semplice per fare questo che mi manca. Qualcuno può dare qualche consiglio?
potrebbe essere un problema di visualizzazione sovrapposizione –
Qualcuno ha codice funzionante di EntityClickListener per Bing Maps? Se puoi darmi un po 'di codice, posso provare a capirlo da solo. Mi sto strappando i capelli per un paio di settimane. –
Ciao @Yawus, hai provato questo link, http://bingmapsandroidsdk.codeplex.com/discussions/263960/ –