使用更新的标记删除地图上的多个标记

时间:2016-11-28 11:00:23

标签: java android arrays google-maps loops

我有这个小问题。我有Listener方法,可以监听标记。当某人更改位置时,它会触发侦听器方法,该方法依次触发onLocationLoaded()方法并传递具有所有位置和其他详细信息的MarkerOption对象。现在我的问题是将这个MarkerOption markersReceived对象保存在带有特殊ID的Marker对象中,以便稍后我可以通过此id找到它们,以便在相同MarkerOption的位置更新时从地图中单独删除它们。对于唯一身份证我已将其保存在MarkerOption的标题中。

所以这是我的代码

final Marker[] markerTrack = new Marker[3];
final String[] idTrack = new String[3];
public void onLocationLoaded(MarkerOptions markersReceived) {
    if(markersReceived != null) {
    /// Check if marker is implemented if yes then remove and overwrite exixting else make new array

        for(int i =0 ; i < markerTrack.length; i++){
            if(idTrack[i] == markersReceived.getTitle()){
                markerTrack[i].remove();
                markerTrack[i] = mMap.addMarker(markersReceived);

            }else{
                //make new marker
                markerTrack[i] = mMap.addMarker(markersReceived);
                idTrack[i] = markersReceived.getTitle();
            }
        }

因此,在onLocationLoaded(MarkerOptions markersReceived)方法中,它接收多个MarkerOptions对象,问题是识别类似对象并在地图中更新它们并从地图中删除先前的标记。这个删除的东西让我烦恼,地图上充满了新的和以前的标记

PS mMap.clear()没有帮助。无论如何Thanx提前帮助。

2 个答案:

答案 0 :(得分:1)

首先,我要感谢大家的努力。我最终找到了解决我的多重标记的方法,将它们单独删除并更新它们。

这是帮助我实现这个目标的逻辑

     final Marker[] markerTrack = new Marker[4];
            //final String[] idTrack = new String[3];
            final ArrayList<String> id = new ArrayList<String>();
            id.add("HELLO");
            final int[] i = {0};
 . . . .. . .
....
....
    @Override
 public void onLocationLoaded(MarkerOptions markersReceived) {
   if (markersReceived != null ) {
      if (id.contains(markersReceived.getTitle())) {
          int j = id.indexOf(markersReceived.getTitle());
           markerTrack[j].remove();
           markerTrack[j] = mMap.addMarker(markersReceived);
     } else {
           markerTrack[i[0]+1] = mMap.addMarker(markersReceived);
          id.add(markersReceived.getTitle());
           i[0]++;
      }
   }

但伙计我现在遇到一个问题......那就是我的异步任务包含另一个异步方法,它花费了太多时间从网上加载结果......有没有办法加快进程... 感谢名单

答案 1 :(得分:0)

您的这行代码应该是:

SELECT referrals.origin_country, Count(*) AS ['number']
FROM referrals
WHERE (((referrals.referral_date) Between [Forms]![EAL Referral Search Form]![dat_termly_report_start] And [Forms]![EAL Referral Search Form]![dat_termly_report_end]))
GROUP BY referrals.origin_country;

更新并检查,它是否有效?