我有一个自定义对话框,它扩展了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类一起使用它?

解决方法:

由于要扩展android Dialog类,因此可以在Activity的实例中实现Dismiss Listener并在创建Dialog时对其进行设置,然后在侦听器中实现所需的任何功能,具体取决于用来关闭Dialog的按钮.

希望这能解决您的问题.

编辑您可以使用dialog.setCanceledOnTouchOutside(false);如果您在对话框外部触摸,它将停止关闭对话框.

就像是,

Dialog dialog = new Dialog(context)

dialog.setCanceledOnTouchOutside(false);

或者

覆盖对话框的onTouchEvent()并检查操作类型.如果动作类型是

“ MotionEvent.ACTION_OUTSIDE”表示用户正在对话框区域之外进行交互.因此,在这种情况下,您可以取消对话框或决定要执行的操作.

查看原图?

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);.这将防止对话框因backpress事件而取消.

或者,您也可以覆盖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;

}

});

快乐编码!

标签:dialog,java,android

来源: https://codeday.me/bug/20191029/1962361.html

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐