Android中fragment切換狀態

     最近寫一個地圖的app,用到了fragment來進行切換,其中有fragment中顯示的是地圖,但是發現在切換過程中每次地圖會重新加載,實際上就是fragment的重新創建,用戶體驗不好,而且很耗費流量。

     經過查找發現fragment除了replace方法之外還有兩個方法show,hide可以解決這個問題。

     

private void replaceFragment(Fragment fragment) {
		if (mFragment != fragment) {
			FragmentManager manager = getFragmentManager();
			FragmentTransaction transaction = manager.beginTransaction();
			if (!fragment.isAdded()) {
				transaction.hide(mFragment).add(R.id.content, fragment)
						.commit();
			} else {
				transaction.hide(mFragment).show(fragment).commit();
			}
			mFragment = fragment;
		}

	}


mFragment是默認顯示的fragment,每次在在切換時隱藏當前的然後顯示替換的fragment。但是這樣也會出現一個問題,fragment在一定情況下會出現重疊,比如將屏幕旋轉,或者activity由於意外停止重啓都是可以出現這種情況的。

第一種屏幕旋轉的情況可以在activity中設置

    android:configChanges="orientation|screenSize"
在android3.2的版本也就是13後

 android:configChanges="orientation|keyboardHidden"
使用上面的這一種方法還是會重新調用生命週期,因爲切屏時屏幕的寬高會改變,所以在minTarget版本13及以後的需要使用screenSize來控制旋轉。

而第二種重啓activity的情況解決方法有兩種

一是重寫onSaveInstanceState,將super.onSaveInstanceState(outState);註釋掉

二是在activity的oncreate方法中判斷savedInstanceState是否爲null,如果爲空才創建fragmen

發佈了46 篇原創文章 · 獲贊 2 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章