0

我有一个 DialogFragment (android.support.v4.app.DialogFragment),我用它来实例化:

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 需要一个 Bundle 作为参数,我找不到可以传递给它的合理的东西。我曾尝试调用 getArguments() 但这会返回 null。

那么有没有我可以传递给 onSaveInstanceState() 的论点,它会给我带来与改变方向相同的魔力?我也愿意接受其他简单的方法来保留通话之间的对话状态。

谢谢

4

1 回答 1

1

我不知道OnSaveInstanceState,但是您可以Boolean为每个复选框创建变量,并且在OnCheckedChangeListener每个复选框中,您可以将复选框的状态保存在这些布尔变量中。

或者

你也可以SharedPreferences用来存储你的复选框的状态

并且要访问您必须使用的警报对话框中的复选框

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

希望能帮助到你...

于 2013-03-22T12:19:20.533 回答