问题
I am making an app which has map v2 and I am displaying multiple pins successfully. I have followed an tutorial which was just displaying the pin/markers on map v2.
Through service I am getting information of Marker showing the Hotels location on map . The service is sending me the information which include Hotel Name, Location , Food , Services , rating and Latitude and longitude.so let me explain what I have done so far
what I am doing is getting each hotel specification in my asynctask and in this I am calling the following method to add marker
addMarker(Double.parseDouble(latitude), Double.parseDouble(longitude));
addMarker Function is as follows :
public void addMarker(Double Lat, Double Long) {
if (null != googleMap) {
MyMapFragment.this.googleMap.addMarker(new MarkerOptions()
.position(new LatLng(Lat, Long))
.title("You")
.draggable(true)
);
}
}
this is good as it is showing the markers successfully but I know this is not the right thing to do as I wanted each marker to show its own other specific information , so for doing this I know I have to save the information of markers but I don't know how to do it
**What I want **
What I want is to save each pin/marker record against it and on click of that marker open its information in a new window or activity so How can I achieve this , Please share me an code to get the idea or please redirect me to an easy code I do know about the demo project on github But I am not able to understand it as it is complex for me . Please help
回答1:
Unfortunately you cannot add metadata to your markers. What you need to do instead - is to save markers as you add them to some data structure in form of map (<Marker, Model>
), so you can retrieve model based on marker.
Let's assume you have a Model
class which defines Hotel information. In this case, you can have a map of objects to keep track of your markers:
Map<Marker, Model> markerMap = new HashMap<Marker, Model>();
Now as you add markers, just put them in this map:
public void addMarker(Model hotelModel) {
if (null != googleMap) {
Marker hotelMarker = MyMapFragment.this.googleMap.addMarker(new MarkerOptions()
.position(new LatLng(hotelModel.getLat(), hotelModel.getLon()))
.title(hotelModel.getTitle())
);
markerMap.add(hotelMarker, hotelModel);
}
}
Now when marker is clicked, you can get hotel model based on the marker object:
@Override
public boolean onMarkerClick (Marker marker) {
Model hotelModel = markerMap.get(marker);
if(hotelModel != null) {
Log.d("test", "Hotel "+hotelModel.getTitle()+" is clicked");
}
}
来源:https://stackoverflow.com/questions/31630807/how-to-save-information-of-markers-of-map-v2-so-that-it-can-be-retrieve-on-marke