2013-02-07 23 views
0

在GoogleMap應用程序中,我目前使用標記來標記船位置。我做了一個記錄許多屬性的類,例如船名,緯度,經度,MMSI代碼等。當用戶點擊地圖上的許多標記之一時,打開一個生成的可點擊信息窗口。當該用戶單擊信息窗口時,將打開另一個活動,顯示有關該標記的詳細信息。將對象或類鏈接到GoogleMap標記

那麼至少最後一句是我想要的。我可以提取經度和緯度位置,但不是其他的。問題是,雖然我有一個Ship類,包含我需要的所有信息,但它沒有以任何參考方式連接到標記,我也不知道如何做這樣的事情!

我最好的想法是使Ship擴展標記,但這是根據Eclipse IDE的final類,因此無法擴展。

這是我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")); 
     } 
} 

回答

1

而是與"Simulate"填充snippet(),具有一些獨特的標識符來填充它你Ship,這樣您就可以在DockWharf或中查找或OnePercenterYachtClubHashMap<String,Ship>或您存儲Ship實例的位置。

您還需要設置InfoWindowAdapter,因此您可以自定義您的信息窗口內容以不顯示該代碼段,前提是您使用的是信息窗口。

+0

好主意。我將使用唯一的MMSI代碼。 – jhc

1

常用的解決辦法是保持一個Map<Marker, Ship>在你的活動,並做map.get(marker)onInfoWindowClick回調(或任何其他)。

您還可以嘗試我的庫,它添加了Marker.setData(Object)Marker.getData()函數,因此您可以在創建標記並將其回送到onInfoWindowClick回調函數內後將Ship實例放置在那裏。

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