Google Maps v2 - 如何在infowindowadapter中填充两个以上的TextView?

时间:2013-03-15 17:35:27

标签: android google-maps-android-api-2

感到惊讶我已经找不到答案,但是我在使用谷歌地图的信息窗口做一些非常简单的事情时遇到了问题。我想创建一个自定义InfoWindow,其中包含三个文本,其中一个文本具有可自定义的颜色(取决于文本,但在放置标记时通过传入参数来设置此颜色会很好)。这在v1中很容易,但似乎在v2中完全搞砸了。

在我的主要活动中,我将此部分添加到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;
    }
}

创建标记“Title”和“Snippet”时,我可以传入两段文本。但是我想在那里显示三段文字。到目前为止我看到的所有例子都限于两段文字 - 无法获得第三个(或第四个......)元素。

我正在使用v4-support库(使用API​​版本8),但遗憾的是,操作方法given here对我不起作用。

2 个答案:

答案 0 :(得分: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
        }
    }
}

答案 1 :(得分:0)

或者,您可以将其他信息作为JSONObject添加到Marker中,然后使用此getInfoContents方法访问

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