gpt4 book ai didi

android - 将点击事件监听器添加到图钉

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:06:59 25 4
gpt4 key购买 nike

我在 Bing map 中遇到 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();
}
});

但是,单击 图钉 不会执行任何操作。我创建了一个 Toast 消息来准确查看元数据中的内容,但没有任何反应。通过查看应用程序的路径,我可以看出 Bing 使用数据服务来检索其信息:

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

我是否正确编辑了 JavaScript 文件?我自己不懂 JavaScript,我一直在关注 this guide .正在添加 Pushpin,我在 BingMapsView 上看到了,但是 OnClick 方法没有执行。有什么我想念的吗?

在我看来,Bing 为 Pushpin 点击事件创建监听器和事件的路径几乎是一个迷宫。必须有一个更简单的方法来做到这一点,我错过了。谁能给点建议?

最佳答案

我终于找到答案了!在 JavaScript 文件中编辑以下方法,这样脚本就不会检查不存在的元数据。

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 中编写的点击监听器,而不是在 JavaScript 中乱搞。与我之前编辑的 JavaScript 不同的是,entityClicked 方法的参数实际上应该是 entity.entityId 而不是 entityId

关于android - 将点击事件监听器添加到图钉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11251401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com