创建额外/自定义地图标记值

时间:2014-02-12 20:13:51

标签: android google-maps hashmap google-maps-markers

我正在寻找解决问题的方法,我发现了一些信息here,但我无法使用我的代码。

所以,我有一个带标记的谷歌地图。标记是使用JSON信息创建的。我想要的是为每个标记附加一个自定义值,因此每次用户触摸infowindow时,都会打开一个新活动,并附带特定标记的传递参数。

以下是JSON解析和标记创建:

 try{
               JSONArray jArray = new JSONArray(result);
               for(int i=0; i < jArray.length(); i++) {
                        JSONObject jObject = jArray.getJSONObject(i);

                        String image = jObject.getString("image");
                        String title = jObject.getString("title");
                        String snipet = jObject.getString("snipet");

                        double lat=jObject.getDouble("lat");
                        double lng=jObject.getDouble("lng");

                        addMarkers(lat, lng,image,title,snipet);
                    } // End Loop
                } catch (JSONException e) {
                    Log.e("JSONException", "Error: " + e.toString());
                } // catch (JSONException e)

 private void addMarkers( double jLat, double jLng, final String image, final String jTitle,final String jDescription)
    {
     LatLng jLocation = new LatLng(jLat, jLng);

     alertMarkers = theMap.addMarker(new MarkerOptions()
                    .position(jLocation)
                    .title(jTitle)
                    .snippet(jDescription)
                    .icon(BitmapDescriptorFactory.fromResource(icon)));
      theMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
                @Override
                public void onInfoWindowClick(Marker arg0) {
                Toast.makeText(MainActivity.this, arg0.getId(), 1000).show();
    }}

    }

如何将额外参数(即图像)分配给标记,以便当用户触摸标记时,相应的图像将用于进一步处理。

感谢。

修改

这里我添加到上面的代码,但有些事情是不对的: 在开始时宣布

HashMap<String, HashMap> extraMarkerInfo = new HashMap<String, HashMap>();

然后添加了一个新的HashMap:

*alertMarkers = theMap.addMarker(new MarkerOptions()
                        .position(jLocation)
                        .title(jTitle)
                        .snippet(jDescription)
                        .icon(BitmapDescriptorFactory.fromResource(icon)));*

HashMap<String, Integer> data = new HashMap<String, Integer>();
data.put("id",alertID);
extraMarkerInfo.put(alertMarkers.getId(),data);

 public void onInfoWindowClick(Marker arg0) {
                HashMap<String, String> marker_data = extraMarkerInfo.get(arg0.getId());
                Log.i("test",marker_data.get("id"));
(…)

但是我收到了一个错误:

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

在线:

            HashMap<String, String> marker_data = extraMarkerInfo.get(arg0.getId());

我对HashMaps感到困惑。

1 个答案:

答案 0 :(得分:2)

您可以维护自己的HashMap<>,将the ID value of the Marker(由系统生成,不可变)映射到其相应的额外数据。然后,在标记点击上,您可以查找额外数据。您可以在this sample project中看到这一点。

或者,您可以将数据的字符串表示形式(JSON)推送到Marker的片段中,并在以后根据需要再次检索它。我怀疑这将是更多的开销。

Markerfinal,无法扩展。

相关问题