【发布时间】:2015-11-25 18:22:36
【问题描述】:
我有一些简单的代码来检测何时触摸标记。我有一个 GPSActivity 类,它同时包含 MakerOptions 和 Marker 变量。
当我将此GPSActivity 添加到地图时,我会这样做:
activity.marker = _map.addMarker(activity.markerOptions);
我只是将Marker 添加到地图中,然后将地图创建的内容存储回GPSActivity。
稍后,我处理一个触摸。我可以创建一个地图(字典),但由于任何时候地图上的标记都很少,因此只需迭代它们并检查匹配项就更简洁了。
所以我只是在点击标记时这样做(注意:Timber 只是一个记录器,所以假装它是 System.out.Log()):
private void onMarkerTouch(Marker marker) { Timber.d("Marker Touch");
for (GPSActivity activity:_totalActivitiesForToday)
{
Timber.d("Looking for " + marker + " against " + activity.marker);
if(activity.marker == marker)
{
Timber.d("FOUND IT");
} else
{
Timber.d("Did not find it");
}
}
}
我不明白的是比较器失败了。即使标记共享相同的内存地址,比较也会失败。你知道为什么吗?这是“证明”activity.marker == marker 的日志。
为什么当对象具有相同的内存地址时比较失败?在这种情况下,他们的地址都是34f45507。
日志:
标记触摸
寻找 com.google.android.gms.maps.model.Marker@34f45507 反对 com.google.android.gms.maps.model.Marker@34f45507
没找到
【问题讨论】:
-
你试过
marker.equals吗? -
是的,这行得通...为什么!?
-
你如何比较
String? -
我想我得查一下 == vs equals 的用例
标签: java android google-maps marker