- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个扩展 Dialog 类的自定义对话框,我想在用户按下设备的 BACK 按钮关闭 Dialog 后绑定(bind)一个事件来执行一些代码。我怎样才能做到这一点?我发现了一篇帖子,其中有人说在使用对话框和其他窗口小部件时应该使用 .addWindowListener() 。但是对话框类没有addWindowListener 方法,所以我不能使用它。有没有不使用 fragment 的另一种方法,因为我不应该重写 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 类,您可以实现 Dismiss Listener在您的 Activity 中并在创建对话框时设置它,然后在监听器中根据用于关闭对话框的按钮实现您想要的任何功能。
希望这能解决您的问题。
编辑 您可以使用 dialog.setCanceledOnTouchOutside(false);
如果您在对话框外触摸,它将停止关闭对话框。
有点像,
Dialog dialog = new Dialog(context)
dialog.setCanceledOnTouchOutside(false);
或者另外
重写对话框的 onTouchEvent()
并检查操作类型。如果 Action 类型是'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;
}
});
编码愉快!!!
关于java - 如何在 Dialog dismiss Android 上触发事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22531652/
我是一名优秀的程序员,十分优秀!