最近寫一個地圖的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;
}
}
第一種屏幕旋轉的情況可以在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