我有一个扩展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类一起使用?答案 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();
}
});