我的應用程序的主頁有一個FrameLayout。爲什麼片段在使用FrameLayout使用片段事務時調用OnCreate/OnCreateView?
我活動開始時實例化兩個片段,我試圖使用菜單按鈕來切換片段之間。
scanHistoryFrag = new HistoryFragment();
scanFrag = new ScanFragment();
我從不替換這些對象 - 我在應用程序的整個生命週期中使用相同的對象。然而,當我換他們在我的FrameLayout ...
private void ChangeFragment(Android.Support.V4.App.Fragment fragment)
{
Android.Support.V4.App.FragmentTransaction ft = SupportFragmentManager.BeginTransaction();
ft.Replace(Resource.Id.fragmentContainer, fragment);
ft.Commit();
}
的OnCreate和OnCreateView的呼籲片段再次...這意味着在該片段我做創建後的任何調整都具有初始值再次覆蓋。我似乎無法找到解釋爲什麼會發生這種情況,或者我可能如何避免這種情況。
由OnOptionsItemSelected調用ChangeFragment方法,因爲我使用菜單按鈕來切換它們。
你能請詳細說明什麼是else塊發生了什麼?代碼按預期工作,但我不明白爲什麼一個視圖被刪除 – aufty
@aufty,在'OnCreateView'中,我們實際上添加視圖到'ViewGroup'來顯示這個視圖,但「else」塊中的'rootView'是隻有視圖的緩存,在將該緩存添加到ViewGroup之前,我們需要判斷這個緩存是否已經添加到ViewGroup中。如果添加它,我們將其刪除,否則會發生像「此rootView已有父項」這樣的錯誤。 –