之間的複選框狀態我有一個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()的參數,這會給我帶來與定向更改相同的魔法? 我也打開其他簡單的方法來保存我的對話之間的調用狀態。
感謝
感謝您的回覆, 我希望通過這個問題更好地理解片段的生命週期。但是,如何以及何時使用解決方案恢復複選框的狀態? – guibar 2013-03-22 13:00:21
它確實看起來像唯一的方法是手動將所有複選框狀態保存在布爾[]變量中。此外,這必須是我的Dialog子類的一個** static **變量,否則這些變量的狀態會被下一個替換爲一個對象。 對於這樣一個簡單的問題,這看起來非常尷尬。我在某種程度上希望能夠在屏幕重新定位變化中起到很好的作用。但是,當對話被解散並隨後被調用時,該包已被重置,因此似乎不可能。 – guibar 2013-03-22 13:45:40