5

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

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

当我们解开对象时它会自动调用吗?

4

3 回答 3

1

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

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

于 2013-12-04T06:05:05.057 回答
1

里面的文件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

于 2017-04-05T07:06:36.337 回答
0

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

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

这是有关如何正确使用对话框的官方文档的出色指南:

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

于 2012-10-10T15:30:04.350 回答