可能重複:
Separate Back Stack for each tab in Android using FragmentsAndroid的碎片查看狀態的標籤主機內
我最近開始了FragmentActivity內的一個標籤主機內部片段的應用程序的工作。該由於TabActivity類現在已被棄用,因此Android文檔說要做到這一點。爲了使用片段,我使用了android v4支持庫。
目前我的應用程序由一個片段存在的片段組成。導航到新的片段我一直在使用下面的代碼(這似乎基於文檔是正確的)選項卡中:
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(containerId, newFragment);
ft.addToBackStack(null);
ft.commit();
一切都很好,好,直到我打的返回鍵導航到以前的片斷,並意識到我的所有視圖狀態已經被破壞了......發生的事情是,onCreateView()方法在我之前的片段上再次被調用,即使其視圖先前已經被創建......爲什麼會這樣呢?我已經搜索瞭如何正確地維護片段狀態,但我似乎無法找到像這樣的體面文件。
我再嘗試是使用
ft.add(containerId, newFragment);
代替
ft.replace(containerId, newFragment);
這實際上做得很不錯的,我的視圖狀態保留 - onCreateView()每次不叫我以前的片段被顯示。然而,我後來注意到,即使我看不到這些組件,我仍然可以與位於當前片段下面的以前片斷的組件(按鈕等)進行交互。我讀的地方,下面的方法應該是用來保存一些狀態:
public void onSaveInstanceState (Bundle outState)
我實現了這個方法,但是,這是從來沒有叫!我也注意到過去的onCreateView()和onActivityCreated()方法的bundle總是空的。當然,谷歌還沒有使這種事情變得如此困難,我必須錯過一些東西?任何關於如何正確維護片段的視圖狀態的幫助將不勝感激!
謝謝。
其他人都遇到過嗎?請幫忙! :) –
好吧,所以當簡單地在片段之間導航時,看起來狀態問題並不是問題,而是當涉及另一個活動時...請查看我已記錄的錯誤(問題20120):http://代碼。 google.com/p/android/issues/detail?id=20120 –