2011-09-20 51 views
0

我发现很多关于如何保存对话状态的主题,例如使用Bundle实例。 但是,我似乎无法找到如何“正确”重置对话框。重置Android对话框

考虑这个样定制对话框(在XML布局携带ID为一个EditText“INPUT_TEXT”):

public class CustomDialog extends Dialog { 
    public CustomDialog (Context context) { super (context); } 

    protected onCreate (Bundle savedInstanceState) { 
    super.onCreate (savedInstanceState); 

    setContentView(R.layout.input_query); 
    EditText txt = (EditText) findViewById(R.id.input_text); 

    // Consider that I'm declaring here the use of listeners 
    // in order to retrieve input text. 
    } 
} 

时被点击的主要活动的按钮,我弹出此对话框。第二次这个动作发生时,我的EditText包含前一个实例的输入。

现在,我知道我可以重置此EditText的内容,但我想知道是否有一个常见的,已经存在的方法来做到这一点,全对话。例如,如果我有一个更复杂的对话框,我希望它每次实例化该对象时都有“默认”值。我认为去掉super.onCreate(savedInstanceState);的电话可以做到这一点,但事实并非如此。

对不起,如果这是一个愚蠢的问题(或者如果已经解决......我没有找到它)...任何帮助表示赞赏。非常感谢!

回答

4

正常情况下,您应该覆盖活动的onCreateDialogonPrepareDialog方法。

首次创建对话框onCreateDialog被调用,因此您应该使用此方法创建对话框。要初始化/更新对话框的内容,将覆盖onPrepareDialog,它会在显示对话框之前始终调用。

+1

确实,开发指南完全说(http://developer.android.com/guide/topics/ui/dialogs.html#ShowingADialog):“If你没有定义'onPrepareDialog()',那么对话框将保持原来的打开状态。“非常感谢! – piwi

+0

它非常感谢我。 –

1

尝试使用与showDialog()相反的方法 - removeDialog()是该方法。我遇到了类似于你的问题。我展示的每一个对话都有来自第一个实例的数据。当我开始使用removeDialog()时,内容被正确更新。

+0

如果您调用removeDialog,那么您正在有效地禁用创建的对话框的缓存,并强制它们再次创建。对于性能你应该重写onPrepareDialog方法,就像我在我的答案中指出的那样。 –

+0

实际上,我没有看到我可以在哪里调用removeDialog()(给定我的上下文):我认为应该在调用showDialog(INPUT_TEXT)之后调用它,但是这不会显示对话框。我猜对话会在它自己的线程中运行,因此在显示之前它已经被删除。我错了?无论如何,谢谢,它也引起了我对这种方法的关注;-) – piwi