Android谷歌在信息窗口上映射具有不同值的标记

时间:2016-05-19 13:12:40

标签: java android google-maps

我有一个包含大量标记的地图,我希望每个标记中的信息窗口都有自定义值。

添加标记:

final JSONArray stops = new File().getStops(lineId);
try {
    for (int i = 0; i < stops.length(); i++) {
        BitmapDescriptor stopMarkerIcon = new File().getStopMarkerIcon(color, Integer.parseInt(stops.getJSONObject(i).getString("sequence")));
        LatLng coordinate = new LatLng(Double.parseDouble(stops.getJSONObject(i).getString("lat")), Double.parseDouble(stops.getJSONObject(i).getString("lng")));
        MarkerOptions markerOptions = new MarkerOptions().icon(stopMarkerIcon).position(coordinate).anchor(.5f, .5f);
        googleMap.setInfoWindowAdapter(new StopsInfoWindow(i));
        googleMap.addMarker(markerOptions);
    }
} catch (JSONException e) { e.printStackTrace(); }

信息窗口适配器:

public class StopsInfoWindow implements GoogleMap.InfoWindowAdapter {

    private View view;
    private int i;

    public StopsInfoWindow(int i) {
        final LayoutInflater inflater = (LayoutInflater) Controller.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.item_stop_marker_info, null);
        this.i = i;
    }

    @Override
    public View getInfoContents(Marker marker) {
        return null;
    }

    @Override
    public View getInfoWindow(final Marker marker) {
        TextView tvLat = (TextView) view.findViewById(R.id.tv_lat);
        TextView tvLng = (TextView) view.findViewById(R.id.tv_lng);
        tvLat.setText("Latitude:" + i);
        tvLng.setText("Longitude:" + i);

        return view;
    }
}

问题是当我点击任何标记时,它显示所有标记的值相同。在这种情况下&#34;我&#34;是stops.length() - 1;

我认为问题在于:

googleMap.setInfoWindowAdapter(new StopsInfoWindow(i));

每次我添加一个标记(每次迭代for循环)我都会在地图上设置一个新的信息窗口。有没有办法将适配器添加到标记本身而不是地图?这样我就可以拥有一个新的InfoWindow,其中包含每个标记的自定义值。

1 个答案:

答案 0 :(得分:0)

使用HashMap

我不确定这是否是最佳解决方案,但它确实有效。基本上我只是将标记添加到HashMap中并将此HashMap传递给我的自定义信息窗口类。

添加标记:

export ANDROID_HOME=/Users/$USER/Library/Android/sdk
export PATH=${PATH}:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools

信息窗口适配器:

"dependencies": {
  "react-router": "^2.4.0",
  ...
}