user3079559
user3079559

Reputation: 417

Google Map info window adapter

I am trying to impliment InfoWindow Adapter.

I am facing the problem of having info for the first marker being displayed for all markers.

I have read that i have to impliment OnInfoWindowClickListener() but i failed to .

The code the load the map is as below.

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();

        }
    });

}

Any ideas on how to make it work?

Ronald

Upvotes: 0

Views: 539

Answers (1)

Rod_Algonquin
Rod_Algonquin

Reputation: 26198

The problem is that you put the map.setInfoWindowAdapter in the for loop which will change and change each time you iterate the data.. so the last data of the bridges will be the infowindow layout so that why all of your info window are identical..

Solution:

instead if putting the map.setInfoWindowAdapter in the forloop. just set the bridges as a tag to the marker and use the marker parameter getInfoWindow(Marker arg0) to get the tag..

Upvotes: 1

Related Questions