【问题标题】:onSaveInstanceState/onRestoreInstanceState for a dialog对话框的 onSaveInstanceState/onRestoreInstanceState
【发布时间】:2012-10-01 02:23:50
【问题描述】:

我试图弄清楚 onSaveInstanceState/onRestoreInstanceState 如何与对话框一起工作。 使用 Acitivity 很容易,因为它们在 Activity 被杀死/重新启动时被调用。

我们的 Activity 显示一个登录对话框。 对话框的onSaveInstanceState/onRestoreInstanceState什么时候调用?

解绑对象时会自动调用它吗?

【问题讨论】:

标签: android dialog save restore


【解决方案1】:

@theblitz:是的,从 Activity 管理 Dialog 的生命周期有点不方便。

我在 Dialog 中有 getter 方法来检索其状态变量,然后我将它们存储在 Activity 的 Bundle 中。在 Activity 的 onResume 或 onCreate 时,我从 Bundle 中检索存储的变量,并将它们传递给 Dialog 的参数化构造函数以创建一个新的 Dialog。所以现在我有一个对话框,它给人一种天生被状态维护的错觉。

【讨论】:

    【解决方案2】:

    Dialog 中的文档说:

    注意:活动提供了一种工具来管理创建、保存和 恢复对话。请参阅 {@link Activity#onCreateDialog(int)}、{@link Activity#onPrepareDialog(int, Dialog)}, {@link Activity#showDialog(int)} 和 {@link Activity#dismissDialog(int)}。

    那么如果你想知道对话框的onSaveInstanceState/onRestoreInstanceState是什么时候调用的呢?您应该在Activity#onCreateDialog(int) 中创建您的对话框并显示对话框Activity#showDialog(int)。你可以看到Activity#performSaveInstanceState,它会调用Activity#saveManagedDialogs。但是你现在应该使用DialogFragment

    【讨论】:

      【解决方案3】:

      不应使用或期望对话像常规活动一样工作。它们应该用于收集用户输入或显示信息。您可以使用复选框、文本视图等 UI 元素为它们创建自定义布局,并捕获用户信息并将其存储以供以后使用。

      在您的登录对话框中,通过为用户名、密码等创建带有文本视图的自定义布局来获取用户数据,将此信息存储在您的应用中,然后以您喜欢的方式使用它。

      以下是有关如何正确使用对话框的官方文档的极好指南:

      http://developer.android.com/guide/topics/ui/dialogs.html

      【讨论】:

      • 但是为什么Dialog类包含onSaveInstanceState/onRestoreInstanceState方法呢?
      • 嗯,有时,对于特殊要求,您可能需要子类化对话框类并管理生命周期。但是我上面描述的方法是谷歌根据他们的开发者指南推荐的方法。
      • 问题是 - 如果 Activity 被 Android 杀死然后重新启动该怎么办。如果当前显示对话框,则它不会自行重新出现。
      猜你喜欢
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多