为什么我的InfowindowAdapter数据没有变化?

时间:2017-08-17 05:20:58

标签: android google-maps-markers infowindow

我正在调用createMarker,它在循环运行时动态添加数据。我正在使用InfoWindowAdapter添加标记选项。但是我有问题,当我点击带有infoContent的标记时,它不会改变。

以下是我添加标记选项的方法..

public MarkerOptions createMarker(final String Date, final String Time, final String Location, final String Engine,final String Remarks, Double latitude, final Double longitude, final String Plate_num) {

        System.out.println(Location + " lLocation");

        mMapFragment.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
            @Override
            public View getInfoWindow(Marker marker) {
                return null;
            }

            @Override
            public View getInfoContents(Marker marker) {
                View v = getActivity().getLayoutInflater().inflate(R.layout.custom_info_contents_vehicle_map, null);
                TextView plate_nu = (TextView) v.findViewById(R.id.plate_num);
                TextView dat = (TextView) v.findViewById(R.id.date);
                TextView tim = (TextView) v.findViewById(R.id.time);
                TextView loc = (TextView) v.findViewById(R.id.location);
                TextView engin = (TextView) v.findViewById(engine);
                TextView remark = (TextView) v.findViewById(R.id.rema);
                plate_nu.setText(Plate_num);
                dat.setText(Date);
                tim.setText(Time);
                loc.setText(Location);
                engin.setText(Engine);
                remark.setText(Remarks);
                return v;
            }
        });

        return new MarkerOptions()
                .position(new LatLng(latitude, longitude))
                .title("Plate No.")
                .snippet(Plate_num)       
                .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));
    }

我正在使用system out输出位置,它确实发生了变化。但是,在问题所在的infocontents内部。我没有看到任何更改,或者如何使用上面的代码使用InfoWindowAdapter更改数据?

2 个答案:

答案 0 :(得分:0)

当您点击标记时,首先会隐藏您的信息窗口并在完成工作后更改信息窗口的内容,然后显示信息窗口。我会改变你的代码,请做同样的事情。

mMapFragment.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {

            @Override
            public boolean onMarkerClick(final Marker marker) {

                marker.hideInfoWindow();

                vm = new VehicleMap();
                vm.setPlate_num(marker.getSnippet());

                latitudeG = marker.getPosition().latitude;
                longitudeG = marker.getPosition().longitude;

                marker.showInfoWindow();

                BottomSheetDialogFragment bottomSheetDialogFragment = new BottomSheetModalMapFragment(activity);
                bottomSheetDialogFragment.show(getFragmentManager(), bottomSheetDialogFragment.getTag());

                return true;
            }
        });

答案 1 :(得分:0)

您不能简单地使用循环添加适配器。它不像那样工作。 您只能像任何其他适配器一样设置一个信息适配器。 所以没有动态 FINAL 值。 您需要将标记设置为标记 并且在标记值的基础上,您需要检索您的值并将其更新为在信息窗口中膨胀的自定义布局。

有关详细信息,请参阅我的blog

查看类似的SO Answer,其中使用getInfoContents方法

中的标记实例更新值