当 Android Dialog 被解除时,你可以触发一个事件吗?
Posted
技术标签:
【中文标题】当 Android Dialog 被解除时,你可以触发一个事件吗?【英文标题】:Can you fire an event when Android Dialog is dismissed? 【发布时间】:2011-09-06 10:03:00 【问题描述】:假设我在我的 android 应用中创建了一个对话框,如下所示:
private static ProgressDialog dialog;
dialog = ProgressDialog.show(MainActivity.this, "", "Downloading Files. Please wait...", true);
现在,是否可以在调用以下内容时触发事件?
dialog.dismiss();
我想这样做而不只是在dialog.dismiss();
之后调用我的方法的原因是因为在静态类中调用了对话框关闭,而我要做的下一件事是加载一个新的活动(不能使用静态类中的意图)。
【问题讨论】:
【参考方案1】:使用OnDismissListener。
Dialog
类中有一个setOnDismissListener(...)
方法
【讨论】:
警告,从 API 11 开始,此方法与 DialogFragments 不兼容。请参阅 DialogFragment.onCreateDialog() @Mahan 你有没有找到任何替代方案?谢谢 请注意,如果用户单击主页按钮,这将不起作用 - 在这种情况下,我找到的解决方案是在创建对话框的活动被关闭时进行监听。【参考方案2】:当然可以 - 检查:
public void onDismiss(DialogInterface dialogInterface)
//Fire event
【讨论】:
【参考方案3】:每当通过单击 PositiveButton、NegativeButton、NeturalButton 或单击对话框外部关闭对话框时,总是会自动调用“onDismiss”,因此您在 onDismiss() 方法中的内容也会自动调用,例如,
@Override
public void onDismiss(DialogInterface dialogInterface)
...
你甚至不需要调用dismiss()方法。
【讨论】:
【参考方案4】:对对话框使用 setOnDismissListener 方法。
dialog.setOnDismissListener(new DialogInterface.OnDismissListener()
@Override
public void onDismiss(DialogInterface dialog)
if (mIsSettingsDirty)
refreshRecyclerView();
);
【讨论】:
【参考方案5】:如果您在自定义对话框类中 - 覆盖dismiss()。 我建议在 super.dismiss() 之前插入逻辑。 Kotlin 示例:
override fun dismiss()
Utils.hideKeyboard(mContext, window)
super.dismiss()
【讨论】:
【参考方案6】:如果你想处理Dialog
隐藏,你可以重写2个方法。
@Override
public void cancel()
super.cancel();
callback();
@Override
public void dismiss()
super.dismiss();
callback();
【讨论】:
以上是关于当 Android Dialog 被解除时,你可以触发一个事件吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android 上解除对 InputStream.read() 的阻止?