And*_*ndy 107 android android-dialogfragment
文档dismiss()从Dialog类中说出这个方法:
关闭此对话框,将其从屏幕上删除.可以从任何线程安全地调用此方法.请注意,在关闭对话框时,不应该覆盖此方法以进行清理,而是在其中实现
onStop().
在我的代码中,我所做的只是打电话getDialog().dismiss()来解雇它.但我没有做任何其他事情,甚至没有使用onStop().所以我问到究竟如何正确解雇a DialogFragment以避免任何内存泄漏等.
Hei*_*nzi 184
tl; dr:关闭a的正确方法DialogFragment是dismiss() 直接在DialogFragment上使用.
详细信息:DialogFragment的文档说明
控制对话框(决定何时显示,隐藏,关闭它)应该通过API在这里完成,而不是直接调用对话框.
因此,您不应该使用getDialog().dismiss(),因为这将dismiss() 在对话框上调用.相反,您应该使用dismiss()DialogFragment本身的方法:
public void dismiss()
关闭片段及其对话框.如果片段被添加到后台堆栈,则将弹出所有后台堆栈状态,包括此条目.否则,将提交新事务以删除该片段.
正如您所看到的,这不仅关闭对话框,还关注处理流程中涉及的片段事务.
只有onStop在显式创建需要手动清理的任何资源(关闭文件,关闭游标等)时才需要使用.即使这样,我也会覆盖onStopDialogFragment而不是onStop底层的Dialog.
Ter*_*rel 69
我认为关闭a的更好方法DialogFragment是:
Fragment prev = getSupportFragmentManager().findFragmentByTag("fragment_dialog");
if (prev != null) {
DialogFragment df = (DialogFragment) prev;
df.dismiss();
}
Run Code Online (Sandbox Code Playgroud)
这样你就不必拥有对它的引用,DialogFragment并且可以从任何地方关闭它.
小智 11
为什么不尝试仅使用此代码:
dismiss();
Run Code Online (Sandbox Code Playgroud)
如果您想自行关闭对话框片段。您可以简单地将此代码放在要关闭对话框的对话框片段中。
例如:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
Run Code Online (Sandbox Code Playgroud)
这将关闭屏幕上显示的最近的对话框片段。
希望对你有帮助。
I gave an upvote to Terel's answer. I just wanted to post this for any Kotlin users:
supportFragmentManager.findFragmentByTag(TAG_DIALOG)?.let {
(it as DialogFragment).dismiss()
}
Run Code Online (Sandbox Code Playgroud)
Kotlin 版本的 Terel 答案
(fragmentManager.findFragmentByTag(TAG) as? DialogFragment)?.dismiss()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
110433 次 |
| 最近记录: |