Tengo un problema con EntityClickedListener
en Bing Maps. Codifiqué siguiendo el ejemplo dado:Adición de escucha de evento de clic a marcador
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();
}
});
Sin embargo, al hacer clic en el la Pushpin
no hace nada. Creé un mensaje de Toast para ver exactamente qué hay en los metadatos, pero no pasa nada. Mirando a través de la ruta de la aplicación, te puedo decir que Bing utiliza un servicio de datos para recuperar su información:
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();
}
};
También he editado el archivo JavaScript para eliminar algunas comprobaciones que pueden haber impedido la Listener
de trabajo:
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
};
¿He editado el archivo JavaScript correctamente? Yo mismo no sé JavaScript y he estado siguiendo this guide. Se está agregando el Pushpin
y estoy viendo en mi BingMapsView
, pero el método OnClick
no se ejecuta. ¿Se me escapa algo?
La ruta que toma Bing para crear escuchas y eventos para Pushpin
hacer clic en eventos es casi un laberinto en mi opinión. Tiene que haber una manera más simple de hacer esto que me estoy perdiendo. ¿Alguien puede dar algún consejo?
puede ser un problema de superposición de vista –
¿Alguien tiene código de trabajo del 'EntityClicknerist' para Bing Maps? Si puedes darme algún código, puedo intentar resolverlo yo mismo. Me he estado rasgando los pelos durante las últimas dos semanas. –
Hola @Yawus, has probado este enlace, http://bingmapsandroidsdk.codeplex.com/discussions/263960/ –