如何在Dialog上触发事件解雇Android?

时间:2014-03-20 11:32:33

标签: java android dialog

我有一个扩展Dialog类的自定义对话框,我想在用户按下设备的BACK按钮后关闭Dialog后绑定一个事件来执行一些代码。我怎样才能做到这一点?我找到了一个帖子,其中有人说在使用Dialogs和其他Window小部件时应该使用.addWindowListener()。但是对话框类没有addWindowListener方法,所以我不能使用它。有没有使用片段的另一种方法因为我不应该重写MyCustomDialog类?

这是代码:

public class MyCustomDialog extends Dialog {

public MyCustomDialog(Context context, int layoutResourceId) {
    super(context);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(layoutResourceId);

}
}  

感谢您的关注!

编辑:我在Android开发者网站上发现了这个,有没有办法将它与MyCustomDialog类一起使用?

onDismiss DialogInterface

3 个答案:

答案 0 :(得分:3)

由于您正在扩展android Dialog类,您可以在Activity中实现Dismiss Listener并在创建Dialog时设置它,然后在监听器中实现您想要的任何功能,具体取决于按钮曾被用来解雇对话。

希望这能解决您的问题。

修改您可以使用dialog.setCanceledOnTouchOutside(false);,如果您在对话框外触摸,将停止关闭对话框。

类似的东西,

  Dialog dialog = new Dialog(context)
  dialog.setCanceledOnTouchOutside(false);

或者

覆盖onTouchEvent()对话框并检查操作类型。如果动作类型是 ' MotionEvent.ACTION_OUTSIDE'表示用户在对话区域外进行交互。因此,在这种情况下,您可以减少对话框或决定要执行的操作。 view plainprint?

dialog.setOnTouchListener(new View.OnTouchListener(){
    @Override
    public boolean onTouch(View v, MotionEvent event)  
    {  

       if(event.getAction() == MotionEvent.ACTION_OUTSIDE){  
            Toast.make(getApplicationContext(), "TOuched outside the dialog", Toast.LENGTH_LONG).show();  
               this.dismiss();  
       }  
       return false;  
    }
});  

如果要进行反击,您可以执行dialog.setCancelable(false);,这会阻止对话从背景事件中取消。

或者您也可以覆盖setOnKeyListener事件并将自己的代码放入其中。

修改

dialog.setOnKeyListener(new Dialog.OnKeyListener() {

        @Override
        public boolean onKey(DialogInterface arg0, int keyCode,
                KeyEvent event) {
            // TODO Auto-generated method stub
            if (keyCode == KeyEvent.KEYCODE_BACK) {
                finish();
                dialog.dismiss();
            }
            return true;
        }
    });

快乐编码!!!

答案 1 :(得分:1)

您需要在Dialog类中覆盖 onBackPressed 。还要确保在覆盖OnBackPressed后关闭对话框。

试试这个

public class MyCustomDialog extends Dialog {

public MyCustomDialog(Context context, int layoutResourceId) {
    super(context);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(layoutResourceId);

}

@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onBackPressed();

     dismiss();   // make sure to call dismiss to close dialog

    // put your code here
}
}

答案 2 :(得分:0)

如果您想在用户单击/触摸对话框外并关闭它或使用后退按钮关闭时触发事件,请使用

dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
                //your trigger goes here
                Toast.makeText(IntroductoryActivity.this, "on cancel", Toast.LENGTH_SHORT).show();
            }
        });

但是如果你想在某些东西关闭对话框时触发一个事件,就像其他一些事件一样,那么使用

dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
            @Override
            public void onDismiss(DialogInterface dialog) {
                //your trigger goes here
                Toast.makeText(IntroductoryActivity.this, "on dismiss", Toast.LENGTH_SHORT).show();
            }
        });