[英]What to determine a Fragment restore upon Activity re-create?
對於具有ID的View
,在調用super.onSaveInstanceState(outState);
時將自動保存它們super.onSaveInstanceState(outState);
。
對於添加到Activity
Fragment
,在重新創建其Activity
(例如屏幕旋轉)時將重新創建它的情況是什么? 確定什么? 規則是什么?
到目前為止,我已經嘗試了以下情況。 但是,試錯法並不意味着任何規則或解決方案。
重新存儲Fragment
的情況:
FragmentTransaction.add()
到具有ID的布局中。 FragmentTransaction.add()
: FragmentTransaction.add()
僅用於標簽 不重新存儲Fragment
的情況:
super.onSaveInstanceState(outState);
被跳過。 Fragment
。 一般規則是什么? 我在文檔中錯過了什么?
提前致謝。
據我了解和實驗,所有動態(以編程方式)添加的Fragment
都保存在其Activity
調用super.onSaveInstanceState(outState)
。
Fragment
包括,
Fragment
s僅帶有標簽(沒有UI), Fragment
附加到View
(帶有UI), Fragment
s的兩者的用戶界面和一個標簽。 關於將具有UI的Fragment
還原到沒有匹配ID的布局中,確實可以重新創建該Fragment
。 只是無法在布局中直觀顯示,並顯示以下警告消息:
04-08 11:41:22.445: W/PhoneWindow(9853): Previously focused view reported id 2131165226 during save, but can't be found during restore.
一旦返回具有匹配ID的UI,它就會正確還原。
我遇到了同樣的問題,您可以在這里看到它: 屏幕旋轉后,即使布局內沒有這樣的ID,findFragmentById()也會返回一個片段
http://developer.android.com/training/basics/fragments/communicating.html上的Android開發者文檔引用了以下內容:
當配置更改導致托管這些片段的活動重新啟動時,其新實例可能會使用不同的布局,該布局不包含與先前布局相同的片段。 在這種情況下,所有先前的片段仍將被實例化並在新實例中運行。 但是,不再與視圖層次結構中的標記關聯的任何對象都不會創建其內容視圖,並且將從isInLayout()返回false。 (此處的代碼還顯示了如何確定放置在容器中的片段是否不再在該容器的布局中運行,並且在這種情況下避免創建其視圖層次結構。)
這意味着,我們必須檢查屏幕方向,而不是相信空指針檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.