什么时候调用Dialog的dismiss()方法
调用Dialog的dismiss()方法的方式:
1. 重写Dialog的onKeyDown()方法里进行调用:
?
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { Log.d(Constant.TAG,"dialog onKeyDown"); if(keyCode == KeyEvent.KEYCODE_BACK) { dismissOut(); return true; } return super.onKeyDown(keyCode, event); }
?
?会出现的问题:如果用一直按住Back键,则会一直调用dismissOut方法,会让退出动画不停的执行。
2.?重写Dialog的onKeyUp()方法里进行调用:
@Override public boolean onKeyUp(int keyCode, KeyEvent event) { Log.d(Constant.TAG,"dialog onKeyDown"); if(keyCode == KeyEvent.KEYCODE_BACK) { dismissOut(); return true; } return super.onKeyUp(keyCode, event); }
?会出现的问题:用户按下Back键,退出的Dialog出来,用户松开Back键,退出的Dialog就会马上消失
3.?重写Dialog的onBackPressed()方法里进行调用:
@Override public void onBackPressed() { Log.d(Constant.TAG,"dialog onKeyDown"); dismissOut(); }
?这样就没有问题了。
?
其实onBackPressed()方法也是在onKeyUp方法里进行调用的,只是做了判断,代码如下:
public boolean onKeyUp(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking() && !event.isCanceled()) { onBackPressed(); return true; } return false; }?