簡體   English   中英

從片段中正確使用實例狀態保存

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM