如何保存Map v2的标记信息,以便可以在单击标记时进行检索

Coa*_*key 2 android google-maps google-maps-markers supportmapfragment

我正在制作一个具有地图v2的应用程序,并且成功显示了多个图钉。我遵循了一个仅在地图v2上显示图钉/标记的教程。

通过服务,我得到了Marker的信息,该信息在地图上显示了Hotels的位置。服务正在向我发送包括酒店名称,位置,食物,服务,等级以及经纬度在内的信息。因此,让我解释一下到目前为止我所做的事情

我正在做的是在我的asynctask中获取每个酒店规范,在此我调用以下方法来添加标记

addMarker(Double.parseDouble(latitude), Double.parseDouble(longitude));
Run Code Online (Sandbox Code Playgroud)

addMarker函数如下:

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)


            );
}
}
Run Code Online (Sandbox Code Playgroud)

这很好,因为它可以成功显示标记,但是我知道这不是正确的选择,因为我希望每个标记都显示其自身的其他特定信息,因此,为此,我知道我必须保存标记的信息,但是我不知道该怎么做

**我想要的是 **

我想要的是保存每个图钉/标记记录,并在该标记上单击以在新窗口或活动中打开其信息,因此,我该如何实现,请分享给我一个代码以获取提示,或者将我重定向到我确实知道有关github上的演示项目的简单代码,但由于它对我来说很复杂,因此我无法理解。请帮忙

Pav*_*dka 5

不幸的是,您无法将元数据添加到标记中。您需要做的是-在将标记添加到地图(<Marker, Model>)形式的某些数据结构中时保存标记,以便您可以基于标记检索模型。

假设您有一个Model定义酒店信息的类。在这种情况下,您可以拥有一个对象图来跟踪标记:

Map<Marker, Model> markerMap = new HashMap<Marker, Model>();
Run Code Online (Sandbox Code Playgroud)

现在,当您添加标记时,只需将它们放在此地图中即可:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,当单击标记时,您可以基于标记对象获得酒店模型:

@Override
public boolean onMarkerClick (Marker marker) {
    Model hotelModel = markerMap.get(marker);
    if(hotelModel != null) {
        Log.d("test", "Hotel "+hotelModel.getTitle()+" is clicked"); 
    }
}
Run Code Online (Sandbox Code Playgroud)