2013-03-22 73 views
0

之間的複選框狀態我有一個DialogFragment(android.support.v4.app.DialogFragment),我用實例:獲得一個AlertDialog來節省話費

public Dialog onCreateDialog(Bundle savedInstanceState) { 
    ... 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    LayoutInflater inflater = getActivity().getLayoutInflater(); 
    View v = inflater.inflate(R.layout.selector, null); 
    builder.setView(v); 
    ... 
} 

我沒有setRetainInstance所以默認情況下它是假。

在該對話框中,我有一些複選框,我希望在調用此對話框之間記住它們的狀態。我沒有在對話框上放置按鈕,我依靠用戶在對話框外點擊關閉它。

當屏幕方向改變時,一切正常;該對話框以其他方向重新創建,並保留用戶的選擇。這似乎是自動發生的,因爲onSaveInstanceState方法被調用。

當我的對話框關閉時,我想獲得相同的效果,我注意到當用戶在對話框外單擊時,不會調用onSaveInstanceState。

我的直覺是強制在onDismiss內調用onSaveInstanceState(當對話框關閉時會調用onSaveInstanceState)。但onSaveInstanceState需要一個Bundle作爲參數,我無法找到合理的傳遞給它的東西。我試着調用getArguments(),但是這返回null。

那麼是否有我可以傳遞給onSaveInstanceState()的參數,這會給我帶來與定向更改相同的魔法? 我也打開其他簡單的方法來保存我的對話之間的調用狀態。

感謝

回答

1

我不知道生根粉OnSaveInstanceState但你可以爲每個複選框Boolean變量和OnCheckedChangeListener每個複選框可以保存這些布爾變量複選框的狀態。

OR

ü也可以使用SharedPreferences存儲烏爾複選框

和訪問UR警告對話框內的R複選框狀態u必須使用

CheckBox cbox = (CheckBox) view.findViewById(R.id._cbox); 
          ^^^^^ 

希望它有助於..

+0

感謝您的回覆, 我希望通過這個問題更好地理解片段的生命週期。但是,如何以及何時使用解決方案恢復複選框的狀態? – guibar 2013-03-22 13:00:21

+0

它確實看起來像唯一的方法是手動將所有複選框狀態保存在布爾[]變量中。此外,這必須是我的Dialog子類的一個** static **變量,否則這些變量的狀態會被下一個替換爲一個對象。 對於這樣一個簡單的問題,這看起來非常尷尬。我在某種程度上希望能夠在屏幕重新定位變化中起到很好的作用。但是,當對話被解散並隨後被調用時,該包已被重置,因此似乎不可能。 – guibar 2013-03-22 13:45:40