【问题标题】:Reset an Android Dialog重置 Android 对话框
【发布时间】:2011-09-20 08:49:11
【问题描述】:

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

考虑这个示例自定义对话框(XML 布局带有 ID 为“input_text”的 EditText):

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.
  }
}

当在主 Activity 中单击按钮时,我会弹出此对话框。此操作第二次发生时,我的 EditText 包含来自前一个实例的输入。

现在,我知道我可以重置此 EditText 的内容,但我想知道是否有一种通用的、已经存在的方法可以在对话框范围内执行此操作。例如,如果我有一个更复杂的对话框,我希望每次实例化这个对象时它都有“默认”值。我认为删除对super.onCreate(savedInstanceState); 的调用可以解决问题,但事实并非如此。

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

【问题讨论】:

    标签: android android-2.2-froyo android-dialog


    【解决方案1】:

    通常您应该覆盖活动的onCreateDialogonPrepareDialog 方法。

    第一次创建对话框,调用onCreateDialog,所以你应该在这个方法中创建你的对话框。要初始化/更新对话框的内容覆盖onPrepareDialog,它总是在显示对话框之前调用。

    【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 如果您调用 removeDialog,那么您实际上禁用了已创建对话框的缓存,并强制重新创建它们。为了提高性能,您应该像我在回答中指出的那样覆盖 onPrepareDialog 方法。
    • 实际上,我看不到在哪里可以调用 removeDialog()(根据我的上下文):我认为应该在调用 showDialog(INPUT_TEXT) 之后立即调用它,但这永远不会显示对话框。我猜这个对话框在它自己的线程中运行,因此它甚至在显示之前就已经被删除了。我错了?无论如何,谢谢,它也引起了我对这种方法的注意;-)
    猜你喜欢
    • 2011-06-06
    • 2011-01-10
    • 1970-01-01
    • 2018-03-29
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多