调用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;
- }
转自:http://handsomeliuyang.iteye.com/blog/1392299