现在的位置: 首页 > 综合 > 正文

高德地图fragment 动态加载地图 嵌套问题

2013年12月12日 ⁄ 综合 ⁄ 共 1661字 ⁄ 字号 评论关闭
一、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了。

抱歉!评论已关闭.