Android 谷歌地图中每个地图标记的对话框片段?
我有一个通过谷歌地图中的InfoWindowClickListener打开的对话框片段。我需要为地图上的每个标记创建一个唯一的对话框片段。对话框片段按如下顺序在循环中为每个位置创建:Android 谷歌地图中每个地图标记的对话框片段?,android,android-maps-v2,infowindow,marker,dialogfragment,Android,Android Maps V2,Infowindow,Marker,Dialogfragment,我有一个通过谷歌地图中的InfoWindowClickListener打开的对话框片段。我需要为地图上的每个标记创建一个唯一的对话框片段。对话框片段按如下顺序在循环中为每个位置创建: public PlaceMarker(Place place) { this.place = place; this.marker = map.addMarker(new MarkerOptions() .position(pl
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());
}
});
}
我遇到的问题是,虽然标记信息窗口完全符合我的预期(每个地方都有自己的详细信息),但每次标记单击的对话框片段都显示为最近创建的对话框片段(如果没有意义,请告诉我)。也就是说,如果我按以下顺序为以下地点创建placemarker:巴尔的摩、费城、华盛顿特区,则当您单击这些地点的标记时,巴尔的摩、费城和华盛顿特区的信息窗口将为每个地点提供正确的信息窗口,但是点击信息窗口后,你只会看到华盛顿特区所有3个地方的对话框片段
编辑:我通过这段代码从for循环中添加位置,这段代码占据位置并为每个位置创建一个新的restaurantmarker:
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>
}
public void addPlace(地点){
this.places.add(place);//this.places是一个列表
this.markerBank.put(place,new PlaceMarker(place));//this.markerBank是一个HashMap
}
您的问题是,您将最后一个位置存储在一个名为place
的变量中,并使用以下行:
this.place = place;
当您的OnInfo窗口单击触发时,它将使用该变量中的值。您需要有一个位置列表,并将每个位置与每个标记相关联。使用HashMap来实现这一点。比如:
HashMap<Place, Marker> myList = new HashMap<>();
HashMap myList=newhashmap();
我希望这有帮助。请参阅代码更新。我已经在这样做了,很抱歉没有说得更清楚。您可能需要将设置信息窗口ClickListener
移出PlaceMarker
。每次循环通过addPlace
时,它都会保存最后一个位置。或者我需要它作为标记的位置吗?虽然标记存储在PlaceMarkers中,但我需要在何处添加SetOnInfo WindowClickListener?或者至少,您建议在哪里尝试?在您获得mMap
的实例后仅尝试一次。然后添加一个逻辑,以获取与onInfo窗口中提供给您的标记相对应的位置单击