高德地圖fragment 動態載入地圖 巢狀問題

心鑫發表於2013-09-14
一、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了。

相關文章