本文来自:fair-jm.iteye.com 转截请注明出处
官网的教程是在Activity下 在Fragment下在高德论坛找到一些方法 试了下可以显示 但是切换后总会有些问题
比如切换后就是新的了 切换后地图就不显示了
我这种方式可以在切换后保持地图状态 但是得限定屏幕为水平或者竖直 如果翻转的话也会报错
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<com.amap.api.maps.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</com.amap.api.maps.MapView>
</RelativeLayout>
代码:
package com.cc.android.map.fragment;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.amap.api.maps.AMap;
import com.amap.api.maps.MapView;
import com.cc.android.map.MainActivity;
import com.cc.android.map.R;
import com.cc.android.map.constant.Constants;
public class MapFragment extends Fragment {
private static MapFragment fragment=null;
public static final int POSITION=0;
private MapView mapView;
private AMap aMap;
private View mapLayout;
public static Fragment newInstance(){
if(fragment==null){
synchronized(MapFragment.class){
if(fragment==null){
fragment=new MapFragment();
}
}
}
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (mapLayout == null) {
Log.i("sys", "MF onCreateView() null");
mapLayout = inflater.inflate(R.layout.map, null);
mapView = (MapView) mapLayout.findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
if (aMap == null) {
aMap = mapView.getMap();
}
}else {
if (mapLayout.getParent() != null) {
((ViewGroup) mapLayout.getParent()).removeView(mapLayout);
}
}
return mapLayout;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
((MainActivity) activity).onSectionAttached(Constants.MAP_FRAGMENT);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onResume() {
Log.i("sys", "mf onResume");
super.onResume();
mapView.onResume();
}
/**
* 方法必须重写
* map的生命周期方法
*/
@Override
public void onPause() {
Log.i("sys", "mf onPause");
super.onPause();
mapView.onPause();
}
/**
* 方法必须重写
* map的生命周期方法
*/
@Override
public void onSaveInstanceState(Bundle outState) {
Log.i("sys", "mf onSaveInstanceState");
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
/**
* 方法必须重写
* map的生命周期方法
*/
@Override
public void onDestroy() {
Log.i("sys", "mf onDestroy");
super.onDestroy();
mapView.onDestroy();
}
}
这样可以保证在切换fragment的时候 地图不会不显示或者还原
注意要在清单中注明app的方向 不能让屏幕翻转
在Activity标签中写:
android:screenOrientation="portrait"