0

在 GoogleMap 应用程序中,我目前正在使用标记来标记船舶位置。我创建了一个Ship 记录许多属性的类,例如船名、纬度、经度、MMSI 代码等。当用户单击地图上的许多标记之一时,将打开一个生成的可单击信息窗口。当该用户单击信息窗口时,会打开另一个 Activity,显示有关该标记的详细信息。

好吧,至少最后一句话是我想要的。我可以提取纬度和经度位置,但其他的不多。问题是,虽然我有一个Ship包含我需要的所有信息的类,但它没有以任何参考方式连接到标记,我也不知道如何做这样的事情!

我最好的想法是Ship扩展 Marker,但这是一个final根据 Eclipse IDE 的类,因此不能扩展。

这是我的Ship课:

public class Ship {

    /** Ship has the following properties
     *  */
    private String shipname = "";
    private String MMSI = "XXXX";
    private double[] loc = new double[2];

    public Ship(String _shipname, String _MMSI, double[] _loc) {
        shipname = _shipname;
        MMSI = _MMSI;
        loc[0] = _loc[0]; // Latitude
        loc[1] = _loc[1]; // Longitude

    }
    public String getName() {
        return shipname;
    }
    public String getMMSI() {
        return MMSI;
    }
    public double getLat() {
        return loc[0];
    }
    public double getLongi() {
        return loc[1];
    }
}

同时,GoogleMap标记是通过以下方式动态插入的:

public void setupRegion(GoogleMap map, ArrayList<Ship> ships) throws IOException {
        for(Ship ship : ships) {
            map.addMarker(new MarkerOptions()
               .icon(BitmapDescriptorFactory.fromResource(R.drawable.marker_red))
               .position(new LatLng(ship.getLat(), ship.getLongi()))
               .title(ship.getName())
               .snippet("Simulate"));
        }
}
4

2 回答 2

1

不要snippet()使用"Simulate"填充,而是使用您的某个唯一标识符填充它Ship,这样您就可以在存储实例ShipDockorWharfShipyardor OnePercenterYachtClubor or 中查找 。HashMap<String,Ship>Ship

您还需要设置一个InfoWindowAdapter,因此您可以自定义您的信息窗口内容以不显示片段,假设您正在使用信息窗口。

于 2013-02-07T18:08:01.063 回答
1

一个常用的解决方案是Map<Marker, Ship>在你的活动中保留一个并做map.get(marker)内部onInfoWindowClick回调(或任何其他)。

你也可以试试我的库,它添加Marker.setData(Object)Marker.getData()函数,所以你可以在创建标记后将 Ship 实例放在那里并将它们放回onInfoWindowClick回调中。

http://code.google.com/p/android-maps-extensions/

于 2013-03-19T07:30:37.000 回答