本文來自: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"
不知道大家有什麼方法 讓高德地圖顯示在fragment中 在切換後依然保留原來的狀態 翻轉屏也不會有異常 歡迎討論