2015-11-04 74 views
0

如何在3情況下保存MapView的狀態1)旋轉設備2)啓動新的碎片並返回上一個3)啓動新的碎片並旋轉設備。下面的代碼解析2事件:保存地圖狀態

public void onPause() { 
    Log.d(TAG, "onPause"); 
    mMapView.onPause(); 
    View view = mActivity.getCurrentFocus(); 
    if (view != null) { 
     InputMethodManager imm = (InputMethodManager)mActivity.getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(view.getWindowToken(), 0); 
    } 
    super.onPause(); 
    cameraPosition = mGoogleMap.getCameraPosition(); 

} 

@Override 
public void onResume() { 

    Log.d(TAG, "onResume"); 
    super.onResume(); 
    mMapView.onResume(); 
    mMapView.getMapAsync(this); 
} 

這1個事件:

@Override 
public void onSaveInstanceState(Bundle outState) { 

    Log.d(TAG, "onSaveInstanceState"); 

    if(mSearchString !=null && !mSearchString.equals("")) { 
     outState.putString("search", mSearchString); 
    } 

    final Bundle mapViewSaveState = new Bundle(); 

    mMapView.onSaveInstanceState(mapViewSaveState); 

    outState.putBoolean("firstStart", false); 

    outState.putBundle("mapState", mapViewSaveState); 
    super.onSaveInstanceState(outState); 
} 

但在3事件mMapView == null且NPE。怎麼解決?

+0

是您在更改方向時重新啓動嗎? –

+0

當然是的! –

回答

1

如果您想阻止重新啓動活動,只需將其添加到清單。

到您的活動代碼

<activity 
android:configChanges="orientation|keyboardHidden|screenSize" 
/> 

編輯:

該代碼將加載佈局按照您的方向改變

活動添加以下代碼:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     setContentView(R.layout.landscapeView); 
    } else { 
     setContentView(R.layout.portraitView); 
    } 
} 
+0

它可以做不同? –

+0

沒有什麼不同,但除此之外,如果您想要爲活動的橫向視圖單獨佈局,則可以檢查我更新後的答案。 –

2

你要做的兩個主要任務,同時更改設備 1>的方向。在manifest文件活動中,你必須把這個代碼

android:configChanges="keyboardHidden|orientation|screenSize" 

2>你必須覆蓋

@Override 
protected void onSaveInstanceState (Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putCharSequence("key", "save the value" ); 
} 

現在您在上創建活動

if(bundle !=null) 
{ 
String saveValue=bundle.getCharSequence("key"); 
} 

現在使用saveValue方向後。