我有一个通过谷歌地图中的InfoWindowClickListener打开的对话框片段。我需要为地图上的每个标记添加一个唯一的对话框片段。对于每个地方,按顺序循环创建对话框片段如下:
public PlaceMarker(Place place) {
this.place = place;
this.marker = map.addMarker(new MarkerOptions()
.position(place.getLocation())
.title(this.place.getName())
.snippet(place.getInfo()));
mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
FragmentManager manager = getFragmentManager();
//restdialog = RestaurantDialog.newInstance(place);
RestaurantDialog restdialog = new RestaurantDialog();
Bundle args = new Bundle();
args.putSerializable("place", place);
restdialog.setArguments(args);
restdialog.setTargetFragment(DefaultMap.this, 0);
restdialog.show(manager, place.getName());
}
});
}
我遇到的问题是,虽然标记信息窗口完全符合我的预期(每个地方都有自己的详细信息),但每个标记点击的对话框片段都会显示为最近创建的对话框片段(如果这没有意义,请告诉我)。即,如果我按以下顺序为以下地点创建地标:巴尔的摩,费城,华盛顿特区,巴尔的摩,费城和华盛顿特区的信息窗口将在您点击其标记时为每个地点提供正确的信息窗口,但单击信息窗口后,您只能看到所有3个位置的华盛顿特区的对话框片段。
编辑:我将for循环中的地点添加到这一段代码中,然后为每个地方创建一个新的餐厅标记:
public void addPlace(Place place) {
this.places.add(place); //this.places is a List<Place>
this.markerBank.put(place, new PlaceMarker(place)); //this.markerBank is a HashMap <Place, PlaceMarker>
}
答案 0 :(得分:1)
您的问题是您使用以下行将最后一个位置存储在名为Place
的变量中:
this.place = place;
当onInfoWindowClick
触发时,它会使用该变量中的值。您需要有一个地点列表,并将每个地点与每个标记相关联。使用HashMap。类似的东西:
HashMap<Place, Marker> myList = new HashMap<>();
我希望这会有所帮助。