Je rencontre un problème avec le EntityClickedListener
dans Bing Maps. Je l'ai codé en suivant l'exemple donné :
map.setEntityClickedListener(new EntityClickedListener()
{
@Override
public void onAvailableChecked(String layerName, int entityId)
{
HashMap metadata = map.getLayerManager.GetMetadataByID(layerName, entityId);
Toast.makeText(Activity.this, metadata.toString(), Toast.LENGTH_LONG)
.show();
}
});
Cependant, cliquer sur le Pushpin
ne fait rien. J'ai créé un message Toast pour voir exactement ce qu'il y a dans les métadonnées mais rien ne se passe. En examinant le chemin de l'application, je peux dire que Bing utilise un service de données pour récupérer ses informations :
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 metadata = new HashMap();
metadata.put("record", r);
el.add(p, metadata);
}
bingMapsView.setMapView(new LocationRect(maxLat, maxLon, minLat, minLon));
el.updateLayer();
}
};
J'ai également modifié le fichier JavaScript pour supprimer certaines vérifications qui auraient pu empêcher le Listener
de fonctionner :
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
};
Ai-je correctement modifié le fichier JavaScript? Je ne connais pas moi-même JavaScript et j'ai suivi ce guide. Le Pushpin
est ajouté et je le vois sur mon BingMapsView
, mais la méthode OnClick
ne s'exécute pas. Est-ce que j'ai oublié quelque chose ?
Le chemin que Bing emprunte pour créer des Listeners et des événements pour les événements de clic sur les Pushpin
est presque un labyrinthe à mon avis. Il doit y avoir une manière plus simple de le faire que j'ignore. Quelqu'un pourrait-il donner des conseils?