2012-08-24 82 views
3

我的活動中有一個複雜的數據對象。當用戶想要編輯該對象的數據時,會顯示類似片段的浮動對話框。該片段引用了數據對象的某些部分。用戶對該片段的數據進行實時編輯。例如,一些簡單的文本編輯。配置更改後恢復片段的對象引用

在用戶編輯此數據時,會發生配置更改(着名的方向更改)。一旦發生變化,系統會自動重新創建所有內容,包括浮動片段,就像以前一樣。

我不知道爲什麼,Android應該剛剛重新啓動活動,爲什麼保存並重新加載後來手動創建的東西?但那是另一個問題。

因此,當片段的新克隆回來時,它已經丟失了數據對象的「連接」。因爲那個數據對象也已經消失了,並且我們有了一個全新的用戶編輯失敗了。我想在配置更改之前保存狀態,然後重新獲得狀態。

  1. 一個活動如何確定它正被用戶 (應該從頭開始)啓動或正在由系統上的配置重新創建。更改(應重新加載 保存的狀態)?

  2. 然後,如何重新建立片段的連接到 數據對象,以便用戶可以繼續編輯像沒有發生過的任何事情 發生?

回答

1

對於大多數的問題,我發現了一些好方法:

  • 通過使用setArguments()到片段中的參數似乎被保留。
  • 致電Fragment方法onAttach()是有保證的。數據交換和事件註冊與父母去這裏。父母可以是Activity或另一個Fragment,因此可能需要檢查Fragment.getParentFragment()
  • AsyncTaskLoader的被保留並通過系統自動重新連接。數據獲取/處理片段的代碼在這裏。
  • 使用自定義數據管理器類,片段不保存對數據對象的引用,而是保存數字對象的引用,就像在數據庫中一樣。
  • 可以使用Command對象來代替直接引用的方法調用。
  • 讓Parent Activity將事件從一個Fragment廣播到所有可以作爲獨立訂閱者的子碎片。