2013-03-31 102 views
0

因此,我的一個android碎片,主細節設置中的細節片段具有多種可能的佈局,具體取決於用戶想要做什麼,以及其中的一種佈局包含用戶輸入數據的大約十幾個EditText字段。Android - 如何知道特定佈局何時關閉

如果用戶輸入數據,然後切換到另一個佈局或其他碎片(從Detail到主碎片),我想在執行切換之前保存他們已經輸入的內容,而不需要用戶執行任何操作。所以我需要知道什麼時候某個特定的佈局ID以前被誇大了,然後被放氣/銷燬/覆蓋/等等。

我該怎麼做? onCreateView(),我在這裏膨脹新的佈局,看起來不夠充分,因爲它似乎沒有提供訪問之前存在的內容的方法,而且如果用戶切換到主Fragment,AFAIK也不會被調用。 getActivity().getCurrentFocus()onCreateView()開始時返回一個視圖,但是與R.layout.my_layout相比,getID()似乎不匹配,並且對佈局中的元素調用getActivity().getCurrentFocus().findViewByID() != null也不起作用。

另外,我什麼時候進行保存?

編輯:我應該重寫onDestroyView()並在那裏運行保存代碼?每當我嘗試這樣做,應用程序崩潰。

回答

0

基於Fragments佈局ID保存和恢復您的臨時數據將是非常反我認爲的模式。

相反,你的輸入數據作爲名稱 - 值對添加到「實例狀態」 Bundle,覆蓋您的片段的onSaveInstanceState(Bundle savedInstanceState)

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
    savedInstanceState.putBoolean("myCheckboxState", myCheckBox.isChecked()); 
    savedInstanceState.putDouble("myDouble", 1.9); 
    savedInstanceState.putInt("myInt", 1); 
    savedInstanceState.putString("myTextViewString", myTextView.getText()); 
    // etc. 
} 

(改編自this answer

Bundle應該是訪問在將Fragment再次添加到容器後的各種生命週期方法中。例如,通過覆蓋onActivityCreated(Bundle savedInstanceState)方法,您可以訪問此Bundle並使用相應的setter方法預填表單輸入。

根據您的持久性要求,您還可以更全局地存儲數據,而不僅僅是在碎片實例狀態中。

相關問題