2013-05-05 157 views
10

我有这样的代码:Android的谷歌地图添加标记自己的标记

protected void onPostExecute(final ArrayList<HashMap<String, String>> adapter) { 

       for (final HashMap<String, String> a : adapter) { 
        LatLng pos = new LatLng(Double.valueOf(a.get(TAG_latitude)), Double.valueOf(a.get(TAG_longitude))); 
        Log.e("pppppos", String.valueOf(pos.latitude)); 
        Marker m = map.addMarker(new MarkerOptions().position(pos) 
          .title(a.get(TAG_NAME)) 
          .snippet("Kiel is cool")); 

        map.setOnInfoWindowClickListener(
           new OnInfoWindowClickListener(){ 
            public void onInfoWindowClick(Marker marker){ 
             Intent nextScreen = new Intent(SearchExchangerActivity.this, BankExchangersListActivity.class); 
             nextScreen.putExtra("exchanger_id", id);  
             startActivityForResult(nextScreen, 0); 
            } 
            }); 
       } 

但是发送额外的信息给其他的时候,我需要设置为不可见,以用户字段例如Tag_id每个标记,并用这个ID,然后在活动,如:

protected void onPostExecute(final ArrayList<HashMap<String, String>> adapter) { 

      for (final HashMap<String, String> a : adapter) { 
       LatLng pos = new LatLng(Double.valueOf(a.get(TAG_latitude)), Double.valueOf(a.get(TAG_longitude))); 
       Marker m = map.addMarker(new MarkerOptions().position(pos) 
         .title(a.get(TAG_NAME)) 
         .snippet("Kiel is cool") 
                .Tag_id(TAG_ID)); 

       map.setOnInfoWindowClickListener(
          new OnInfoWindowClickListener(){ 
           public void onInfoWindowClick(Marker marker){ 
            Intent nextScreen = new Intent(SearchExchangerActivity.this, BankExchangersListActivity.class); 
            nextScreen.putExtra("exchanger_id", marker.get(TAG_ID));  
            startActivityForResult(nextScreen, 0); 
           } 
           }); 
      } 

是真的吗?我怎么能在听众中得到我点击的标记?

而且它可以通过标题字段来实现......但我发现了错误的书写marker.getTitle()时...

UPD

for (final HashMap<String, String> a : adapter) { 
       LatLng pos = new LatLng(Double.valueOf(a.get(TAG_latitude)), Double.valueOf(a.get(TAG_longitude))); 
       Log.e("pppppos", String.valueOf(pos.latitude)); 
       HashMap<Marker, String> m = new HashMap<Marker, String>(); 
         m.put(map.addMarker(new MarkerOptions().position(pos) 
         .title(a.get(TAG_NAME)) 
         .snippet("Kiel is cool")), "1");      

      } 

      map.setOnInfoWindowClickListener(
       new OnInfoWindowClickListener(){ 
        public void onInfoWindowClick(HashMap<Marker, String> marker){ 
         Intent nextScreen = new Intent(SearchExchangerActivity.this, BankExchangersListActivity.class); 
         nextScreen.putExtra("exchanger_id", "1"); 
         startActivityForResult(nextScreen, 0); 
        } 
        }); 

回答

11
  1. 您可以使用Map<Marker, String>,并保持你的数据或
  2. 使用Android Maps Extensions其中getDatasetData函数Marker类。

Btw。您不应在循环中设置InfoWindowAdapter。这个不成立。只有最后一个幸存下来。

+1

你能给例如使用地图<打标,串>的? – 2013-05-05 14:55:50

+0

当我尝试写地图<标记,字符串> M = m.put(map.addMarker(新的MarkerOptions()。位置(POS) \t \t \t \t .title伪(a.get(TAG_NAME)) \t \t \t (“Kiel is cool”)),“1”); \t东西不好 – 2013-05-05 15:07:14

+1

@ValdisAzamaris请看这里使用'Map'解决方法:http://code.google.com/p/gmaps-api-issues/issues/detail?id=4650 – 2013-05-05 15:26:46

2

这是目前正式提供的,setTaggetTag已被添加到标记API。

下从“associate data with a marker”部分取自官方文档:

/** 
* A demo class that stores and retrieves data objects with each marker. 
*/ 
public class MarkerDemoActivity extends FragmentActivity implements 
     OnMarkerClickListener, 
     OnMapReadyCallback { 

    private static final LatLng PERTH = new LatLng(-31.952854, 115.857342); 
    private static final LatLng SYDNEY = new LatLng(-33.87365, 151.20689); 
    private static final LatLng BRISBANE = new LatLng(-27.47093, 153.0235); 

    private Marker mPerth; 
    private Marker mSydney; 
    private Marker mBrisbane; 

    private GoogleMap mMap; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.marker_demo); 

     SupportMapFragment mapFragment = 
       (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 
    } 

    /** Called when the map is ready. */ 
    @Override 
    public void onMapReady(GoogleMap map) { 
     mMap = map; 

     // Add some markers to the map, and add a data object to each marker. 
     mPerth = mMap.addMarker(new MarkerOptions() 
       .position(PERTH) 
       .title("Perth"); 
     mPerth.setTag(0); 

     mSydney = mMap.addMarker(new MarkerOptions() 
       .position(SYDNEY) 
       .title("Sydney"); 
     mSydney.setTag(0); 

     mBrisbane = mMap.addMarker(new MarkerOptions() 
       .position(BRISBANE) 
       .title("Brisbane"); 
     mBrisbane.setTag(0); 

     // Set a listener for marker click. 
     mMap.setOnMarkerClickListener(this); 
    } 

    /** Called when the user clicks a marker. */ 
    @Override 
    public boolean onMarkerClick(final Marker marker) { 

     // Retrieve the data from the marker. 
     Integer clickCount = (Integer) marker.getTag(); 

     // Check if a click count was set, then display the click count. 
     if (clickCount != null) { 
      clickCount = clickCount + 1; 
      marker.setTag(clickCount); 
      Toast.makeText(this, 
          marker.getTitle() + 
          " has been clicked " + clickCount + " times.", 
          Toast.LENGTH_SHORT).show(); 
     } 

     // Return false to indicate that we have not consumed the event and that we wish 
     // for the default behavior to occur (which is for the camera to move such that the 
     // marker is centered and for the marker's info window to open, if it has one). 
     return false; 
    } 
} 
+0

请注意,标签获取器和设置器只能从Google Play服务9.4.0开始 – Skoua 2017-01-19 11:01:23