2013-03-15 65 views
1

驚訝我已經找不到答案了,但我在使用Google地圖的信息窗口做一些非常簡單的事情時遇到問題。我想創建一個自定義的InfoWindow,其中有三段文本,其中一段具有可自定義的顏色(取決於文本,但通過在放置標記時傳入參數來設置此顏色會很好)。這在v1中很容易,但看起來完全搞亂了v2。Google Maps v2 - 如何在infowindowadapter中填充兩個以上的TextViews?

在我的主要活動我有這個部分,我的自定義佈局添加到InfoWindowAdapter:

class MyInfoWindowAdapter implements InfoWindowAdapter{ 
    private final View myContentsView; 

    MyInfoWindowAdapter(){ 
     myContentsView = getLayoutInflater().inflate(R.layout.popup, null); 
    } 

    @Override 
    public View getInfoContents(Marker marker) { 

     TextView textStationName = (TextView) myContentsView.findViewById(R.id.textStationName); 
     textStationName.setText(marker.getTitle()); 

     TextView textAPI = ((TextView)myContentsView.findViewById(R.id.textAPI)); 
     textAPI.setText(marker.getSnippet()); 

     return myContentsView; 
    } 

    @Override 
    public View getInfoWindow(Marker marker) { 
     // TODO Auto-generated method stub 
     return null; 
    } 
} 

我可以得到兩段文本創建標記,「標題」和「片段」時通過。但我有三段文字,我想在那裏顯示。到目前爲止,我看到的所有示例都限於兩段文本 - 無法獲得第三個(或第四個,...)元素。

我正在使用v4-support庫(使用API版本8),不幸的是,given here不適用於我。

回答

1

我可以建議在您的活動中將地圖標記的內容存儲在Map<Marker, InfoWindowContent中,其中InfoWindowContent是一些帶有字段的類,用於填充標記的信息窗口。

將標記添加到地圖後,put標記的信息窗口內容爲Map。然後,在您的信息窗口內容適配器中,從Map獲取標記的內容。

下面是一個例子:

public class MyActivity extends Activity { 

    private static class InfoWindowContent { 
     public String text1; 
     public String text2; 
     public String text3; 
     // ... add other fields if you need them 
    } 

    private Map<Marker, InfoWindowContent> markersContent = new HashMap<Marker, InfoWindowContent>(); 

    private void addMarker() { 
     Marker marker = map.addMarker(...); 
     InfoWindowContent markerContent = new InfoWindowContent(); 
     // ... populate content for the marker 

     markersContent.put(marker, markerContent); 
    } 

    class MyInfoWindowAdapter implements InfoWindowAdapter { 

     @Override 
     public View getInfoContents(Marker marker) { 
      InfoWindowContent markerContent = markersContent.get(marker); 

      // ... populate info window with your content 
     } 
    } 
} 
+0

感謝 - 的作品! – Wouter 2013-03-15 19:02:39

+0

在Google Play服務mapdemo示例中有一個完整的示例 - 請參閱MarkerDemoActivity。 – 2013-03-19 02:47:25

0

或者你可以把在getInfoContents方法在Marker的附加信息作爲JSONObject和訪問它像這樣

JSONObject content = new JSONObject(marker.getSnippet()); 
    textView1.setText(content.getString("myFirstInfo")); 
    textView2.setText(content.getString("mySecondInfo")); 
+0

聽起來不像java一樣。而AFAIK JSON主要用於在Web服務之間傳輸值。可能不是最有效的方法。 – Wouter 2013-03-19 15:58:47

相關問題