【问题标题】:Android google maps add to marker own tagAndroid 谷歌地图添加到标记自己的标签
【发布时间】:2013-04-29 09:01:27
【问题描述】:

我有这样的代码:

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()时遇到错误...

更新

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);
                    }
                  });

【问题讨论】:

    标签: java android google-maps google-maps-android-api-2


    【解决方案1】:

    目前正式可用,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;
        }
    }
    

    【讨论】:

    • 请注意,标签 getter 和 setter 仅从 Google Play Services 9.4.0 开始可用
    【解决方案2】:
    1. 您可以使用Map&lt;Marker, String&gt; 并将您的数据保存在那里或
    2. 使用Android Maps ExtensionsgetDatasetData 函数添加到Marker 类。

    顺便说一句。您不应该在循环中设置InfoWindowAdapter。这没有道理。只有最后一个幸存下来。

    【讨论】:

    猜你喜欢
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多