2016-06-19 65 views
0

我知道如何在程序運行前添加標記,但我不知道如何在程序已經運行時讓用戶插入自己的標記,以及如何保存它。無法在Google地圖API上實時添加標記

如果gmaps API for Android具有此功能並且它確實有效,您是否有想法?

我走在圈子裏,無論如何我找不到它,我真的很感激你能否幫助我。

這裏是我的代碼在里約熱內盧一個靜態標記:

package com.example.dborahramos.myapplication; 

import android.support.v4.app.FragmentActivity; 
import android.os.Bundle; 

import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.OnMapReadyCallback; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.MarkerOptions; 

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { 

    private GoogleMap mMap; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_maps); 
     // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
     SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 
    } 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     mMap = googleMap; 
     LatLng rio = new LatLng(-22.9035,-43.2096); 
     mMap.addMarker(new MarkerOptions().position(rio).title("Rio")); 
     mMap.moveCamera(CameraUpdateFactory.newLatLng(rio)); 
    } 
} 
+1

你可以分享你嘗試過這麼遠嗎? –

+0

每次插入新標記時都應該刷新地圖。 – AndreaM16

+0

Pirate X,代碼已發佈。 –

回答

0

首先創建標記列表。

List<Marker> markers = new ArrayList<Marker>(); 

要從用戶得到一個新的標誌,並將其保存在數據庫中,您可以使用OnMapClickListener,你在這裏用戶點擊地圖中的位置。

GoogleMap.OnMapClickListener onMapClickListener = new GoogleMap.OnMapClickListener() { 
      @Override 
      public void onMapClick(final LatLng location){ 
       //Save new marker in DB with locations. 
       ServerRequest.SaveMarker(location,title).... 
       Callback(){ //Callback 
        clearMarkers(); //Clear previus markers to not overCreate 
        addMarkers(); //Get new Markers from DB and add to the map 
       } 
      } 
     }; 
     mMap.setOnMapClickListener(onMapClickListener); 

然後,當您想從數據庫打印新標記時,首先必須獲取標記並將其保存到列表中。如果您之前已加載標記,請記得先移除地圖上所有存在的標記。

private void clearMarkers(){ 
for(int i = 0; i < markers.size(); i++) 
{ 
    markers.get(i).remove(); 
} 
} 

private void addMarkers(){ 
List<MyLocations> list = ServerRequest.ReturnMarkers.... 
for(MyLocations ml : list) 
{ 
    markers.add(mMap.addMarker(new MarkerOptions().position(new LatLng(ml.getLat(), ml.getLng()).title(ml.getTitle()))); 
} 
} 

一些代碼 添加新的標記,只要你想

markers.add(mMap.addMarker(new MarkerOptions().position(new LatLng(lat, lng)).title("Title"))); 

刪除標記

markers.get(index).remove();