[英]Orientation Change Causes Series of Fragments in Activity Disappear and Do Not Apply Save Instance State
[英]Proper use of instance state save from fragments
我有一個onCreateView
片段我做了一個后台異步調用來獲取一些要顯示的數據。
我將作為后台調用結果的對象保存為片段的成員變量。
當我看到 UI 和數據時一切正常,當我按下主頁按鈕時,應用程序進入后台。 當我重新打開應用程序時,數據位於由我的片段膨脹的 UI 中。
所以現在我不確定以下內容:
1) 我應該將我的對象保存在onSaveInstanceState
嗎?
2) 我應該在哪里恢復它? 在onCreateView
傳遞的包中?
3) 數據何時會保存在我的捆綁包中? 我的意思是我怎么能看到現在不保存它,我會丟失我的用戶界面中的數據?
在您的片段構造函數中,添加以下行:
setRetainInstance(true);
控制是否在 Activity 重新創建期間保留片段實例(例如來自配置更改)。
這取決於您的數據(大小)。
你想在后堆棧上有一個片段(你不能保留片段)?
對於“主頁按鈕操作”和非保留 Fragment 實現 Parcelable 接口並使用 onSaveInstanceState() 來保存和使用 onCreateView()/onCreate() 從 Bundle 恢復數據。
請注意后退按鈕,您將丟失數據。
也像活動一樣,您可以使用 Bundle 保留片段的狀態,以防活動的進程被終止,並且您需要在重新創建活動時恢復片段狀態。 您可以在片段的 onSaveInstanceState() 回調期間保存狀態,並在 onCreate()、onCreateView() 或 onActivityCreated() 期間恢復它。 有關保存狀態的更多信息,請參閱活動文檔。
通過每次顯示數據時都獲取數據,您的片段似乎可以正常工作。
如果您想保存其數據以避免異步獲取,您可以使用onSaveInstanceState
,這要求您使用Bundle
保存數據。
然后在onCreateView
檢查savedInstanceState
是否為null
,如果是異步獲取,否則從savedInstanceState
Bundle
重新創建數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.