我已经设法使用存储的标题和坐标为我的数据库中的每个项目放置一个标记。
我现在正在尝试更改每个InfoWindow的内容,以便显示与每个位置相关的信息(标题和片段除外)。
基本上,地图上存储的所有地点都有一个InfoWindow,其中包含相同类型的信息(例如:价格,开放时间,关闭时间等)。我希望为这些字段显示不同的值 - 存储在数据库中的值。
以下是一些相关代码:
onCreate()的一部分:
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map); final MapWrapperLayout mapWrapperLayout = (MapWrapperLayout) findViewById(R.id.map_relative_layout); map = mapFragment.getMap(); map.setMyLocationEnabled(true); focusMapOnCurrentLocation(); // 39 - default marker height // 20 - offset between the default InfoWindow bottom edge and it's content bottom edge mapWrapperLayout.init(map, getPixelsFromDp(this, 39 + 20)); this.infoWindow = (ViewGroup) getLayoutInflater().inflate(R.layout.info_window, null); this.infoTitle = (TextView) infoWindow.findViewById(R.id.title); map.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() { @Override public View getInfoWindow(Marker marker) { return null; } @Override public View getInfoContents(Marker marker) { infoTitle.setText(marker.getTitle()); mapWrapperLayout.setMarkerWithInfoWindow(marker, infoWindow); return infoWindow; } });
createMarkersFromJson():
void createMarkersFromJson(String json) throws JSONException { // De-serialize the JSON string into an array of city objects JSONArray jsonArray = new JSONArray(json); int length = jsonArray.length(); for (int i = 0; i < jsonArray.length(); i++) { // Create a marker for each city in the JSON data. JSONObject jsonObj = jsonArray.getJSONObject(i); int id = jsonObj.getInt("id"); String name = jsonObj.getString("name"); String address = jsonObj.getString("address"); String phone_number = jsonObj.getString("phone_number"); String city = jsonObj.getString("city"); String latitude = jsonObj.getString("lat"); String longitude = jsonObj.getString("long"); String price = jsonObj.getString("price"); Marker m = map.addMarker(new MarkerOptions() .title(name) .position(new LatLng( Double.parseDouble(latitude), Double.parseDouble(longitude) )) ); // An example of what I am trying to do for all the places on my map: // this.price = (TextView) infoWindow.findViewById(R.id.price); // this.price.setText(jsonObj.getString("price")); } }
问题是相同的InfoWindow与所有标记相关联。我正在寻找一种方法来为我的InfoWindow中的每个标签调用setText()。但是,getInfoContents()只接受标记,标记不能存储此类数据。也许我可以使用HashMap?
答案 0 :(得分:2)
我认为您使用map的想法应该有效。您可以将标记和jsonObjects存储为Map数据结构中的键和值。以下是sydo代码:
map.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
Map<Marker,JsonObject> data = createMapFromJSON();
@Override
public View getInfoWindow(Marker marker) {
return null;
}
@Override
public View getInfoContents(Marker marker) {
JsonObject d = data.get(marker);
if(d!=null){
infoTitle.setText(d.getString("title"));
//set all data
otherViewInInfoWindow.setText(d.getString("address"));
mapWrapperLayout.setMarkerWithInfoWindow(marker, infoWindow);
return infoWindow;
}
}
});