【问题标题】:Getting an AlertDialog to save its checkboxes state between calls获取 AlertDialog 以在调用之间保存其复选框状态
【发布时间】:2013-03-22 11:36:41
【问题描述】:

我有一个 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);
  ...
}

我没有设置RetainInstance,所以默认为false。

在该对话框中,我有几个复选框,我希望在调用此对话框之间记住它们的状态。我没有在对话框上放置任何按钮,我依靠用户单击对话框外部来关闭它。

当屏幕方向改变时,一切正常;对话框以另一个方向重新创建,并保留用户的选择。这似乎是自动发生的,因为调用了 onSaveInstanceState 方法。

我希望在关闭对话框时受益于同样的魔力,并且我注意到当用户在对话框外单击时不会调用 onSaveInstanceState。

我的直觉是从 onDismiss 中强制调用 onSaveInstanceState(对话框关闭时会调用它)。但是 onSaveInstanceState 需要一个 Bundle 作为参数,我找不到可以传递给它的合理的东西。我试过调用 getArguments() 但这会返回 null。

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

谢谢

【问题讨论】:

    标签: android user-interface dialog persistence


    【解决方案1】:

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

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

    为了访问警报对话框中的复选框,您必须使用

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

    希望对你有帮助……

    【讨论】:

    • 感谢您的回复,希望通过这个问题能更好的了解fragment的生命周期。但是,您将如何以及何时使用您的解决方案恢复复选框的状态?
    • 确实似乎唯一的方法是将我所有的复选框状态手动保存在 boolean[] 变量中。此外,这必须是我的 Dialog 子类的 static 变量,否则这些变量的状态会随着一个对象被下一个对象替换而被擦除。对于这样一个简单的问题,这似乎非常尴尬。不知何故,我希望在屏幕重定向更改上效果很好的位也可以在这里得到利用。但是当对话框被关闭并稍后调用时,捆绑包已被重置,因此似乎不可能。
    猜你喜欢
    • 2016-11-26
    • 2012-04-18
    • 2012-10-23
    • 2020-08-16
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多