除了标题和摘要,如何向标记添加额外数据?

10

问题:我的远程服务器返回一个请求的10个值。我解析了响应并使用for循环在地图上添加了标记(这里我向标题和片段添加了信息)。我想要添加额外数据到标记中,以便我可以在信息窗口单击事件中访问它。

在infoWindowClickListener中,我想要访问该额外数据。

如何将额外数据添加到标记中/如何访问特定标记点击的ph数据(否则我将获取所有标记中ph的最后一个值)。

我尝试过这样做。

   private class HttpGetTask extends AsyncTask<Void, Void, String> 
    {
    //URL and http stuff
    }

            @Override
            protected void onPostExecute(String result) {

                try {
                     json = new JSONArray(result);

                    for (int i = 0; i < json.length(); i++) {
                        Log.v("Response", result);
                        final JSONObject e = json.getJSONObject(i);
                        String point = e.getString("point");

                        Log.v("POINT", point);//Checking points

                        String phone1 = e.getString("ph");
                        Log.v("PH", phone1);//Checking phone numbers

                        String[] point2 = point.split(",");//Splitting points
                        double lat1 = Double.parseDouble(point2[0]);
                        double lng1 = Double.parseDouble(point2[1]);
                        Log.v("LLDN", "" + lat1 + "&" + lng1);

                        //Adding multiple markers
//can i add extra information here along with title and snippet
                        gMap.addMarker(new MarkerOptions()
                                .title(e.getString("name"))
                                .snippet(
                                        e.getString("LS")+""+e.getString("ph") )
                                .position(new LatLng(lng1, lat1))
                                .icon(BitmapDescriptorFactory
                                        .fromResource(R.drawable.pmr)));

                    }
                } catch (JSONException e)
                {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

是否可以在标记(marker)上附加额外的值,除了标题和片段?或者是我解析的方式有误?

2个回答

6

虽然@worawee.s的方法可以正常运行,但有更加优雅的解决方案,可以让您向Marker对象添加其他信息。因此,您可以使用Marker的setTag (Object tag)方法来解决这个问题:

您可以使用此属性将任意对象与此标记关联。例如,该对象可以包含有关标记表示内容的数据。这比存储单独的映射要容易。另一个例子是,您可以将与数据集中ID对应的字符串ID关联起来。


4

这不是最好的解决方案,但这是我在应用程序中所做的。

在您的activity/fragment中创建一个名为markersMap的私有字段。

private Map<Marker, ExtraDataObj> markersMap = new HashMap<Marker, ExtraDataObj>();

当你生成标记时,也要将标记和额外数据放入你的标记地图(markersMap)中。
ExtraDataObj extraDataObj = new ExtraDataObj();
// extract and store all data you want in the extraDataObj
....
...
..
Marker marker = gMap.addMarker(new MarkerOptions()
                        .title(e.getString("name"))
                        .snippet(
                                e.getString("LS")+""+e.getString("ph") )
                        .position(new LatLng(lng1, lat1))
                        .icon(BitmapDescriptorFactory
                                .fromResource(R.drawable.pmr)));
markersMap.put(marker, extraDataObj);

在您的onInfoWindowClick中,从markersMap获取额外数据。
ExtraDataObj extraDataObj = markersMap.get(arg0) 

这个没问题,我还参考了一篇博客,他解释得很清楚。 但是我们能否添加额外的自定义数据到标记中呢? 这样我将来就可以使用它了。 - Aparichith
1
从谷歌地图v2标记类参考(https://developer.android.com/reference/com/google/android/gms/maps/model/Marker.html)来看,我认为它目前没有你想要的内容。 - worawee.s

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接