我试图找出onSaveInstanceState / onRestoreInstanceState如何使用对话框。 使用Acitivity很容易,因为在杀死/重新启动Activity时会调用它们。
我们的活动显示登录对话框。 何时是对话框的onSaveInstanceState / onRestoreInstanceState??/ / p>
当我们解开对象时会自动调用吗?
答案 0 :(得分:1)
@theblitz:是的,从Activity管理Dialog的生命周期有点不方便。
我在Dialog中有getter方法来检索它的状态变量,然后我将它们存储在Activity的Bundle中。在onResume或onCreate of Activity中,我从Bundle中检索存储的变量,并将它们传递给Dialog的参数化构造函数以创建一个新的Dialog。所以现在我有了一个对话框,它给人一种天生的状态维护的幻觉。
答案 1 :(得分: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
。
答案 2 :(得分:0)
不应使用或期望对话框像常规活动一样工作。它们应该用于收集用户输入或显示信息。您可以使用复选框,文本视图等UI元素为它们创建自定义布局,并捕获用户信息并将其存储起来供以后使用。
在您的登录对话框中,通过创建包含用户名,密码等文本视图的自定义布局来获取用户数据,将此信息存储在您的应用中,然后根据需要使用它。
以下是关于如何正确使用对话框的官方文档的优秀指南: