Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 谷歌地图中每个地图标记的对话框片段?_Android_Android Maps V2_Infowindow_Marker_Dialogfragment - Fatal编程技术网

Android 谷歌地图中每个地图标记的对话框片段?

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

我有一个通过谷歌地图中的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());
                }
            });
        }
我遇到的问题是,虽然标记信息窗口完全符合我的预期(每个地方都有自己的详细信息),但每次标记单击的对话框片段都显示为最近创建的对话框片段(如果没有意义,请告诉我)。也就是说,如果我按以下顺序为以下地点创建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窗口中提供给您的标记相对应的位置单击