android - Google map 中每个 map 标记的对话框 fragment ?

标签 android android-maps-v2 infowindow marker dialogfragment

我有一个对话框 fragment ,它是通过谷歌地图中的 InfoWindowClickListener 打开的。我需要为 map 上的每个标记创建一个独特的对话 fragment 。对话 fragment 的创建如下,对于每个地方,在一个循环中顺序:

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

我遇到的问题是,虽然标记信息窗口完全符合我的预期(每个地方上面都有自己的详细信息),但每次标记单击的对话框 fragment 都显示为最近创建的对话框 fragment (如果这没有意义,请告诉我)。即,如果我按以下顺序为以下地点创建地标:巴尔的摩、费城、华盛顿特区,那么当您单击它们的标记时,巴尔的摩、费城和华盛顿特区的信息窗口将为每个地点显示正确的信息窗口,但是单击信息窗口后,您只会看到所有 3 个地方的华盛顿特区对话 fragment 。

编辑:我通过这段代码添加了 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>
}

最佳答案

您的问题是您将最后一个位置存储在名为 Place 的变量中,并使用以下行:

this.place = place;

当您的 onInfoWindowClick 触发时,它会使用该变量中的值。您需要有一个地点列表并将每个地点与每个标记相关联。为此使用 HashMap。像这样的东西:

HashMap<Place, Marker> myList = new HashMap<>();

希望对您有所帮助。

关于android - Google map 中每个 map 标记的对话框 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34121119/

相关文章:

android - 为什么使用 Unity 尝试拍照时相机 View 太宽且不清晰?

Android:如何在 Fragment 中更改 ListView 项的值?

Android Map V2 - 为什么需要 MAPS_RECEIVE 权限

Android Google Map v2 - 单击标记信息窗口时启动 Activity

ios - 如何在不点击标记的情况下在 iOS 谷歌地图中显示信息窗口?

java - Android 实时多人游戏 (GPGS) : Not receiving packets after reconnect via in-game invitation

android - 在android中存储安全数据

android - 如何在 Google Maps Android API v2 中计算多边形的中心?

android - Google Maps Android API v2 仅适用于一部手机

google-maps - 谷歌地图信息窗口