android-Fragment橫豎屏翻轉對重新載入的要求

晴天5273發表於2016-12-09

有時候,我們在同一個activity裡面有很多fragment,在橫豎屏的時候,有些fragment要求重新載入資料,有些不需要,如何簡單控制這些需求,本人分享一點小經驗,歡迎大家指正裡面的錯誤。

大家都知道橫豎屏翻轉的時候,activity會重啟,fragment也會重新載入,如果現在要求在橫豎屏翻轉的時候,同一個activity中,一個fragment要重新載入,一個不要重新載入,那該怎麼辦呢?

如果在activity裡面繼承了onConfigurationChanged這個方法之後,這個activity和裡面的fragment是不會重新載入的,也就是說顯示的資料和UI不會改變,只是將豎屏的介面顯示成橫屏。為了控制哪個fragment不重啟哪個fragment要重啟。我們只要在onConfigurationChanged方法裡面針對不同的fragment做不同的處理就好了。

	@Override
	public void onConfigurationChanged(Configuration newConfig) {
		// TODO Auto-generated method stub
		super.onConfigurationChanged(newConfig);
		FragmentManager fragmentManager = getFragmentManager();
		Fragment oldFragment = null;
		if ((oldFragment = fragmentManager
				.findFragmentByTag("Fragment_One")) != null) {
			Fragment newFragment = new FragmentOne();
			FragmentTransaction trans = fragmentManager.beginTransaction();
			trans.remove(oldFragment);
			if (newFragment != null) {
				trans.add(R.id.fragments_container, newFragment, "Fragment_One");
			}
			trans.commit();
		}
	}

假如我們現在有FragmentOne和FragmentTwo,其中FragmentOne要求在橫豎屏的時候activity不重啟,但是FragmentOne要重啟。那麼只要在onConfigurationChanged裡面判斷當前顯示的如果是FragmentOne就remove掉舊的FragmentOne物件,new一個新的FragmentOne物件重新顯示到當前activity。這樣fragment的資料和UI就可以重新載入和改變了。

這樣當橫豎屏翻轉的時候,我們不想重啟activity,但是不同的fragment,有不同的介面或者需求,我們可以通過上面的方法隨意控制fragment要不要重新載入了。

剛開始寫部落格,如有錯誤請大家指正,廢話有點多,原諒我這個菜鳥吧,哈哈。

相關文章