0

我有一張地圖,一次只允許一個標記。但爲了防止標記意外地被另一個標記替換,需要設置標記,以便在添加另一個標記之前清除標記。
我正在通過onMapClick設置標記並通過onMapLongClick清除它們。就目前而言,標記的清除和添加工作正常,但我似乎無法設置地圖,因此您需要先清除地圖。
我試過check for existing markers的解決方案,但它沒有奏效。
這裏是我的設置,目前工程通過清除現有的標記,並添加其他而不需要清除原有標記第一碼:爲什麼我的標記不能重置爲空?

@Override 
    public void onMapLongClick(LatLng position) { 
     mMap.clear(); 
     Toast.makeText(this, "Position Cleared", Toast.LENGTH_SHORT).show(); 
     position = null; 
    } 

    @Override 
    public void onMapClick(LatLng position){ 
     if (position != null){ 
      mMap.clear(); 
      mMap.addMarker(new MarkerOptions() 
      .position(position) 
      .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher_new))); 
     } 
     else { 

      mMap.addMarker(new MarkerOptions() 
      .position(position) 
      .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher_new)));   
     } 
    } 

但我認爲這應該是這樣的:

@Override 
    public void onMapLongClick(LatLng position) { 
     mMap.clear(); 
     Toast.makeText(this, "Position Cleared", Toast.LENGTH_SHORT).show(); 
     position = null; 
    } 

    @Override 
    public void onMapClick(LatLng position){ 
     if (position == null){ 
      //mMap.clear(); 
      mMap.addMarker(new MarkerOptions() 
      .position(position) 
      .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher_new))); 
     } 
     else { 
      Toast.makeText(this, "Clear first", Toast.LENGTH_SHORT).show(); 

     } 
    } 

但是,所有這些都會給我Toast消息,即使在第一次加載地圖時也不能添加標記。

任何幫助將是巨大的

+0

爲什麼你不記得標記引用而不是位置? 'map.addMarker()'返回對添加標記的引用。然後當你引用的時候是null添加新的標記,當它不爲空的時候,要求清除映射(你可以通過調用remove()方法來移除標記 –

+0

@BobanS。 - 這就是我正在嘗試並未能實現的:/ –

+0

我修復了它。謝謝 –

回答

0

創建到添加的標記參考,並重新加入一個新的經緯度位置之前將其刪除。

private Marker marker; 

/** 
** 
some code here 
** 
**/ 

@Override 
public void onMapClick(LatLng position) { 
    if(marker != null) 
     marker.remove(); 
    marker = mMap.addMarker(new MarkerOptions().position(position).icon(
      BitmapDescriptorFactory 
        .fromResource(R.drawable.ic_launcher_new))); 
} 
+0

mansoulx - 我不知道我是否正確地閱讀你的答案,但對我來說它讀取 - 如果標記不是空刪除它,並添加另一個是正確的?如果是這樣,我是什麼需要的是,如果marker不爲null,則顯示一條消息,告訴用戶首先使用地圖上的長按來移除前一個標記,或者如果marker爲null,則添加一個標記 –

0

我發現我用代碼錯誤地作爲這樣的I有固定的問題,因爲這樣的:

public void onMapClick(LatLng position){ 
     if(marker == null) { 
       marker = mMap.addMarker(new MarkerOptions() 
       .position(position) 
       .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher_new))); 
      } else { 
       Toast.makeText(this, "Please clear previous position before adding another", Toast.LENGTH_SHORT).show(); 
      } 

該應用現在沒有如預期。感謝您的幫助

相關問題