Google Map信息窗口适配器

时间:2014-05-31 21:40:24

标签: android google-maps

我正在尝试使用InfoWindow Adapter。

我面临着为所有标记显示第一个标记信息的问题。

我已经读过,我必须使用OnInfoWindowClickListener(),但我没有。

加载地图的代码如下所示。

public void getBridgeData()
{
    db= new DbHelperClass(this);
    bridges= db.getAllBridges();
    DecimalFormat dc=new DecimalFormat("#.00");
    Builder builder= new LatLngBounds.Builder();

    for (int i= 0;i<bridges.size();i++)
    {
        final Bridge b= (Bridge)bridges.get(i);
        // get bridge info
        double lati= b.getLatitude();
        double longo= b.getLongitude();
        // references for calculating Chainage
        double reflat= b.getReflat();
        double reflong= b.getReflong();
        LatLng start = new LatLng(reflat,reflong);
        LatLng end = new LatLng(lati,longo);
         GeneralUtils uts= new GeneralUtils();
         final double ch=   uts.calculateDistance(start, end);      
         final String schainage ="Chainage:" +  dc.format(ch) + "Km";                    
         map.setInfoWindowAdapter(new InfoWindowAdapter() {

            @Override
            public View getInfoWindow(Marker arg0) {

                // TODO Auto-generated method stub
                 View v = getLayoutInflater().inflate(R.layout.infor_window, null);
                 // set custom window info details
                TextView  bname= (TextView) v.findViewById(R.id.bridge);
                String txtname="Bridge Name:" + b.getBridgename();
                bname.setText(txtname);
                TextView  rname= (TextView) v.findViewById(R.id.road_name);
                String txtroad="Road:" + b.getRoadname();
                rname.setText(txtroad);
                TextView  chainage= (TextView) v.findViewById(R.id.chainage);
                chainage.setText( schainage);
                TextView  btype= (TextView) v.findViewById(R.id.bridge_type);
                String txttype= "Bridge Type:" + b.getBridgetype();
                btype.setText(txttype);
                TextView  blength= (TextView) v.findViewById(R.id.bridge_length);
                String l= "Length:" + b.getBridgelength() + "M";
                 blength.setText(l);
                TextView  bwidth= (TextView) v.findViewById(R.id.bridge_width);
                String w= "Width:" + b.getBridgewidth() + "M";
                 bwidth.setText(w);
                return v;
            }

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

            }
        });
        Marker mm=map.addMarker(new  MarkerOptions().position(
                new LatLng(lati, longo))                
                );
        //mm.showInfoWindow();
        builder.include(mm.getPosition());


    }
    final LatLngBounds bounds= builder.build();

    map.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {

        @Override
        public void onMapLoaded() {
            // TODO Auto-generated method stub
            map.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 20));
            map.setMapType(GoogleMap.MAP_TYPE_TERRAIN);

        }
    });
    map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {

        @Override
        public void onInfoWindowClick(Marker arg0) {
            arg0.showInfoWindow();

        }
    });

}

关于如何使其发挥作用的任何想法?

罗纳德

1 个答案:

答案 0 :(得分:1)

问题是你将map.setInfoWindowAdapter放在for循环中,每次迭代数据时都会改变和更改..所以bridges的最后一个数据将是{{1} }布局,以便为什么所有的信息窗口都是相同的..

<强>解决方案:

相反,如果将infowindow放在forloop中。只需将map.setInfoWindowAdapter设置为标记,然后使用标记参数bridges来获取标记。