群集在android版谷歌地图中不起作用。我做错了什么?

群集在android版谷歌地图中不起作用。我做错了什么?,android,google-maps,google-maps-api-3,google-maps-markers,google-maps-android-api-2,Android,Google Maps,Google Maps Api 3,Google Maps Markers,Google Maps Android Api 2,下面是我的代码,用于在给定位置周围渲染100个标记,但无论我做什么,群集/标记都不会显示。我怀疑问题是否与ClusterManager的初始化有关,mClusterManager=newClusterManager(getActivity(),mMap) 从google显示的示例中,ClusterManager初始化为mClusterManager=newclustermanager(这个,getMap()) 但是我的类继承自fragment,getActivity是否返回了错误的上下文?我认为

下面是我的代码,用于在给定位置周围渲染100个标记,但无论我做什么,群集/标记都不会显示。我怀疑问题是否与ClusterManager的初始化有关,
mClusterManager=newClusterManager(getActivity(),mMap)

从google显示的示例中,
ClusterManager
初始化为
mClusterManager=newclustermanager(这个,getMap())

但是我的类继承自
fragment
getActivity
是否返回了错误的上下文?我认为它需要
com.example.mkallingal.mapapp3.MainActivity.PlaceholderFragment

非常感谢您的帮助,如果您愿意帮助我,我会将您的帮助视为最佳答案。多谢各位

下面是我的代码:

  public static class PlaceholderFragment extends Fragment
    {
        public GoogleMap mMap;
        private ClusterManager<MarkerManager> mClusterManager;
        Context _MapContext;

        private  void setUpMapIfNeeded(View RootView) {
            // Do a null check to confirm that we have not already instantiated the map.
            if (mMap == null) {


                FragmentActivity activity = (FragmentActivity)RootView.getContext();
                FragmentManager manager = activity.getSupportFragmentManager();
                Fragment x= manager.findFragmentById(R.id.container);

                Fragment _ChildFragment= x.getChildFragmentManager().findFragmentById(R.id.map);
                // Try to obtain the map from the SupportMapFragment.
                mMap = ((SupportMapFragment) _ChildFragment)
                        .getMap();
                // Check if we were successful in obtaining the map.
                 if (mMap != null) {
                   clusterUp(5.293842, 101.682636);
                  }
            }
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container, false);
            _MapContext= container.getContext();
            setUpMapIfNeeded(rootView);
            return rootView;
        }

        private void clusterUp(double lat, double lng)
        {
            LatLng SYDNEY = new LatLng(5.415694, 101.678282);
            LatLng MOUNTAIN_VIEW = new LatLng(lat,lng);
            mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(SYDNEY, 15));
            mMap.animateCamera(CameraUpdateFactory.zoomIn());
            mMap.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);
            CameraPosition cameraPosition = new CameraPosition.Builder()
                    .target(MOUNTAIN_VIEW)      // Sets the center of the map to Mountain View
                    .build();                   // Creates a CameraPosition from the builder
            mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
            mMap.setOnCameraChangeListener(mClusterManager);
            mMap.setOnMarkerClickListener(mClusterManager);

            mClusterManager = new ClusterManager<MarkerManager>(getActivity(), mMap);

            for (int i=0;i<100;i++){
                LatLng _NewLocation= getLocationNearCords(5.415694, 101.678282, 1000); //randomly generate 100 cordinates around the location

                MarkerManager offsetItem = new MarkerManager(_NewLocation.latitude,_NewLocation.longitude);
                mClusterManager.addItem(offsetItem);
            }
        }

        public class MarkerManager implements ClusterItem {
            private LatLng mPosition = new LatLng(22.2222, 33.3333);

            public MarkerManager() {

            }

            public MarkerManager(double lat, double lng) {
                mPosition = new LatLng(lat, lng);
            }

            @Override
            public LatLng getPosition() {
                return mPosition;
            }
        }


    }
公共静态类占位符片段扩展片段
{
公共谷歌地图;
私人群集管理器McClusterManager;
上下文(mapucontext);
需要专用void setupmapifneed(视图根视图){
//执行空检查以确认尚未实例化映射。
如果(mMap==null){
FragmentActivity=(FragmentActivity)RootView.getContext();
FragmentManager=activity.getSupportFragmentManager();
片段x=manager.findFragmentById(R.id.container);
Fragment _ChildFragment=x.getChildFragmentManager().findFragmentById(R.id.map);
//尝试从SupportMapFragment获取映射。
mMap=((SupportMapFragment)\u ChildFragment)
.getMap();
//检查我们是否成功获得地图。
如果(mMap!=null){
集群(5.293842101.682636);
}
}
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment_main,容器,错误);
_MapContext=container.getContext();
setupmapifneed(rootView);
返回rootView;
}
私人空间集群(双lat、双lng)
{
悉尼LatLng=新LatLng(5.415694101.678282);
LatLng MOUNTAIN_VIEW=新LatLng(lat,lng);
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(悉尼,15));
mMap.animateCamera(CameraUpdateFactory.zoomIn());
mMap.animateCamera(CameraUpdateFactory.zoomTo(10),2000,空);
CameraPosition CameraPosition=新建CameraPosition.Builder()
.target(MOUNTAIN_VIEW)//将地图中心设置为MOUNTAIN VIEW
.build();//从生成器创建CameraPosition
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
mMap.SetonCamerachenglistener(McClusterManager);
mMap.setOnMarkerClickListener(mClusterManager);
mClusterManager=newclustermanager(getActivity(),mMap);

对于(inti=0;iwhoops,my bad,ClusterManager初始化之前附加的事件处理程序,它应该如下所示

 mClusterManager = new ClusterManager<MarkerManager>(getActivity(), mMap);
 mMap.setOnCameraChangeListener(mClusterManager);
 mMap.setOnMarkerClickListener(mClusterManager);
mClusterManager=newclustermanager(getActivity(),mMap);
mMap.SetonCamerachenglistener(McClusterManager);
mMap.setOnMarkerClickListener(mClusterManager);

现在它可以工作了…

需要补充的一点是,目前不推荐使用setOnCameraChangeListener,而应该使用SetOnCameraRaidleListener。