文档中对来自Dialog
类的dismiss()
方法是这样说的:
将关闭此对话框,并将其从屏幕上删除。这个方法可以从任何线程安全地调用。请注意,当对话框关闭时,您不应该重写此方法来进行清理,而是在
onStop()
中实现它。
在我的代码中,我所要做的就是调用getDialog().dismiss()
来消除它。但我不会做任何其他事情,甚至不会使用onStop()
。所以我的问题是,如何正确地消除DialogFragment
,以避免任何内存泄漏,等等。
发布于 2012-08-28 23:35:36
tl;dr:关闭DialogFragment
的正确方法是直接在DialogFragment上使用dismiss()
。
Details:documentation of DialogFragment状态
对话框的
控制(决定何时显示、隐藏、关闭它)应该通过这里的API来完成,而不是直接调用对话框。
因此,您不应该使用getDialog().dismiss()
,因为这将调用对话框上的dismiss()
。相反,您应该使用DialogFragment本身的dismiss()
方法:
公共无效解散()
关闭片段及其对话框。如果将该片段添加到后台堆栈,则将弹出直到并包括此条目的所有后台堆栈状态。否则,将提交一个新的事务来删除该片段。
正如您所看到的,这不仅负责关闭对话框,还负责处理流程中涉及的片段事务。
只有在显式创建了任何需要手动清理的资源(关闭文件、关闭游标等)时,才需要使用onStop
。即使这样,我也会重写DialogFragment的onStop
,而不是底层对话框的onStop
。
发布于 2014-03-05 09:30:25
我认为关闭DialogFragment
的更好方法是:
Fragment prev = getSupportFragmentManager().findFragmentByTag("fragment_dialog");
if (prev != null) {
DialogFragment df = (DialogFragment) prev;
df.dismiss();
}
这样,您就不必持有对DialogFragment
的引用,并且可以从任何地方关闭它。
发布于 2019-03-14 17:41:07
为什么不试着只使用下面的代码:
dismiss();
如果要单独关闭对话框片段,请使用。您可以简单地将此代码放在对话框片段中您想要关闭对话框的位置。
例如:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
这将关闭屏幕上显示的最近对话框片段。
希望对你有帮助。
https://stackoverflow.com/questions/11201022
复制相似问题