一、fragment中动态加载地图
private void initSupportMapFragment() { CameraPosition LUJIAZUI = new CameraPosition.Builder() .target(new LatLng(31.239879, 121.499674)).zoom(18).bearing(0) .tilt(70).build(); AMapOptions aOptions = new AMapOptions(); aOptions.zoomGesturesEnabled(false); aOptions.camera(LUJIAZUI); smf = SupportMapFragment.newInstance(aOptions); getChildFragmentManager().beginTransaction() .add(R.id.pa_ly_location_now_map, smf, "map").commit(); }
smf = SupportMapFragment.newInstance(aOptions);
主要代码 ,实例后直接smf.getmap(),会为空,估计在实例的时候有异步的方法。
官方的例子是放在不同的生命周期内,如initSupportMapFragment放在oncreate中,initAmap放在onresume中;
若是在一个fragment中添加地图应该使用
getChildFragmentManager().beginTransaction().add(R.id.pa_ly_location_now_map, smf, "map").commit()
添加到fragment中 getChildFragmentManager()
private void initAMap() { if (aMap == null) { aMap = smf.getMap(); } aMapListener = new MyAmapListener(aMap, this.getActivity(), aMapHandler); aMap.moveCamera(CameraUpdateFactory.zoomTo(AMapUtils.INITZOOM)); aMap.setOnInfoWindowClickListener(aMapListener); aMap.setOnMarkerClickListener(aMapListener); aMap.setOnMapLongClickListener(aMapListener); aMap.setOnMapClickListener(aMapListener); aMap.setOnMapLoadedListener(aMapListener); UiSettings aMapUiSet = aMap.getUiSettings(); aMapUiSet.setZoomControlsEnabled(true); aMapUiSet.setMyLocationButtonEnabled(false); aMapUiSet.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_RIGHT); aMayLayOutUtils = new AMapLayoutUtils(aMap); printLog("initAMap地图缩放级别" + aMap.getCameraPosition().zoom); }
二、将带地图的fragment添加到activity中
// 若使用getInstance返回一个静态的实例会报 // java.lang.IllegalStateException: Activity has been destroyed // 不明白, transaction.replace(R.id.pa_ly_main_replace,new BaiduLocationFragment(), item + "");
正如注释说的,可能是地图在不用把父类也给destory了。