【问题标题】:Can you fire an event when Android Dialog is dismissed?当 Android Dialog 被解除时,你可以触发一个事件吗?
【发布时间】: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(); 之后调用我的方法的原因是因为在静态类中调用了对话框关闭,而我要做的下一件事是加载一个新的活动(不能使用静态类中的意图)。

【问题讨论】:

    标签: android class static dialog progressdialog


    【解决方案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();
                }
            

            【讨论】:

              猜你喜欢
              • 2018-02-03
              • 1970-01-01
              • 2017-01-03
              • 1970-01-01
              • 2012-10-29
              • 2011-10-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多