2016-06-19 157 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();