Android 如何在自定义对话框关闭时触发事件?

Android 如何在自定义对话框关闭时触发事件?,android,dialog,Android,Dialog,我正在创建自己的自定义对话框。我想在自定义对话框关闭但无法启动时触发一个事件 注意:Ondismiss()没有选项,所以我可以覆盖它。 这是我的密码: Dialog pdialog=new Dialog(MainActivity.this); pdialog.requestWindowFeature(Window.FEATURE_NO_TITLE); pdialog.setContentView(R.layout.cust);

我正在创建自己的自定义对话框。我想在自定义对话框关闭但无法启动时触发一个事件

注意:Ondismiss()没有选项,所以我可以覆盖它。 这是我的密码:

 Dialog pdialog=new Dialog(MainActivity.this);

         pdialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
            pdialog.setContentView(R.layout.cust);

            ImageView cancel=(ImageView) pdialog.findViewById(R.id.close);
            TextView txtheader=(TextView) pdialog.findViewById(R.id.txttheader);

            txtheader.setText("Accent Report");





        pdialog.show();


    pdialog.setOnDismissListener(new OnDismissListener() {

        @Override
        public void onDismiss(DialogInterface dialog) {
            // TODO Auto-generated method stub

            System.out.println("hello world@@@@@");// this line is not getting called.

        }
    });



        pdialog.setCanceledOnTouchOutside(true);
        pdialog.setCancelable(true);

    }

在自定义对话框的类定义中,重写dismise()函数并在其中执行操作。如下所示:

@Override
public void dismiss() {
 someListener.onActionHappened(); //your action
 super.dismiss();
}
同时尝试重写cancel方法。我还没有测试过这个

@Override
public void cancel() {
 someListener.onActionHappened(); //your action
 super.cancel();
}

简单又甜蜜。。您可以在OnClickListener中添加操作。。。它将关闭对话框并执行操作

cancel.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
pdialog.dismiss();  
// Your Action Here

    }
});

您正在采取什么措施来取消自定义对话框, 按自定义对话框的“取消”按钮还是按设备的“后退”按钮? 你可以试试下面的代码 其中视图是自定义对话框视图

 View view=View.inflate(context, R.layout.activity_account_history_screen, null);
    if(view.isShown()) 
    {
    //do some task
    }
    else`enter code here`
    {}

如果我按下对话框上的“取消”按钮,则不会调用on Disclose。如果用户按下Backpress或OnTouchOutside,则不会调用on Disclose。然后将cancel dialog设置为false,并在Backpress上执行操作。您是否已经尝试了下面答案中建议的所有操作?您是否尝试过使用调试器跟踪流,以确定对话框关闭时调用了哪些方法?对话框在SetOnClickListener上关闭如果我使用setondismisslistner,则不会调用Disclease。对话框是否以其他方式关闭?我在代码中看到您阻止了关闭对话框的其他方式。是的,我修改了代码并将我的setcancelable设置为true,因此,如果我触摸外部,对话框将被取消,但setondismisslistner-on Disclease不会被调用,我会有一个取消按钮。在我调用setonclicklistner的过程中,也使用setCanceledOnTouchOutside(true),那么您实际上得到了一个事件,在该事件中对话框将关闭。您可以在对话框上的setonclicklistner上触发一个事件“取消”按钮,在触摸外部时关闭对话框有两个选项1。使setCanceledOnTouchOutside(false)在基本布局和setontouchlistener检查对话框视图中的另一个touchlistener上通过代码显示visibe或not