我正在寻找解决问题的方法,我发现了一些信息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感到困惑。
答案 0 :(得分:2)
您可以维护自己的HashMap<>
,将the ID value of the Marker
(由系统生成,不可变)映射到其相应的额外数据。然后,在标记点击上,您可以查找额外数据。您可以在this sample project中看到这一点。
或者,您可以将数据的字符串表示形式(JSON)推送到Marker
的片段中,并在以后根据需要再次检索它。我怀疑这将是更多的开销。
Marker
是final
,无法扩展。