【问题标题】:Clickable Google Maps marker in Fragment片段中可点击的谷歌地图标记
【发布时间】:2018-05-09 18:12:31
【问题描述】:

我在这里尝试完成的是,当我单击加载时动态添加的标记时能够显示 AlertDialog(调用 API,获取位置并在地图上显示它们)。这是在片段onCreateView 中完成的。

地图加载到这里:

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    FragmentManager fm = getChildFragmentManager();
    mapFragment = (SupportMapFragment) fm.findFragmentById(R.id.map_container);
    if (mapFragment == null) {
        mapFragment = SupportMapFragment.newInstance();
        fm.beginTransaction().replace(R.id.map_container, mapFragment).commit();
    }
}

稍后,我从SupportMapFragment 切换到GoogleMap

@Override
public void onResume() {
    super.onResume();
    if (mMap == null && mapFragment != null) {
        mapFragment.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(GoogleMap googleMap) {
                mMap = Tools.configBasicGoogleMap(googleMap);
                mMap.setMapType(sharedPref.getMapType());
            }
        });
    }
}

所以,从逻辑上讲,我的地图应该准备好为mMap。现在,我想显示一个 AlertDialog,所以我在片段的类定义中执行 implements GoogleMap.OnMarkerClickListener 并在此处实现它:

@Override
public boolean onMarkerClick(final Marker marker) {
    Toast.makeText(getContext(), "Hello world", Toast.LENGTH_SHORT).show();
    AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
    builder.setTitle("Confirmation");
    builder.setMessage("Pour confirmer le rapport, appuyez sur + 1.\nSi le rapport est faux, cliquez sur - 1.");
    builder.setPositiveButton("+ 1", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id){
            URL link = null;
            try {
                link = new URL(S.base_url + "report/increment/" + marker.getTag().toString());
            } catch (MalformedURLException e) {
                e.printStackTrace();
            }
            try {
                BufferedReader in = new BufferedReader(
                        new InputStreamReader(
                                link.openStream()));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });
    AlertDialog ab = builder.create();
    ab.show();
    return false;
}

但连 Toast 都没有显示...当我点击一个标记时,我得到了方向和在 Google 地图中打开按钮,地图以标记为中心,但我的方法没有启动。

总而言之,从逻辑上讲,当我单击加载的其中一个标记时,onMarkerClick 方法应该会自行触发,但这永远不会发生!知道为什么吗?谢谢。

【问题讨论】:

    标签: android maps fragment listener marker


    【解决方案1】:

    我不知道为什么,但 Google Maps API 不能用作片段的实现。以下代码可能适合您。您只需要为本地分配markerClickListener,而不是实现MarkerClickListener。

       //Detect location and set on map
        mMapView.getMapAsync(new OnMapReadyCallback() {
            @SuppressLint("MissingPermission")
            @Override
            public void onMapReady(GoogleMap mMap) {
                googleMap = mMap;
                // Bla
                // Bla
                // Bla your codes about map
                googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
                    @Override
                    public boolean onMarkerClick(Marker marker) {
                        // Triggered when user click any marker on the map
                        return false;
                    }
                });
            }
        });
    

    【讨论】:

      猜你喜欢
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-20
      • 2011-10-11
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      相关资源
      最近更新 更多