当 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() 的阻止?

Android如何在Dialog中适合listview

android 之 Dialog

当模态视图控制器被解除时如何调用函数

当 UIViewController 被解除时重新加载 TableView?

Android dialog实现监听生命周期