首先说下系统默认的返回键:
当你没有复写返回键的时候,你按系统返回键的过程是这样的,
按下–抬起–响应返回键,这就是系统默认的。
网上很多帖子都是这么写的:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
//TODO
return true;
}
return false;
}
通过实验你会发现这段代码的实际过程是这样的:
按下–响应返回键。所以这样写是不正确的,在有些情况下会引发奇怪的问题。
下面是正确的写法:
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
backChecked();
return true;
}
return false;
}
差别很小,但这样才是正确的写法。
顺便说一下另外一个项目中的小问题,就是做网络请求时候的加载框,这个加载框默认是点击周边不可取消但是点击返回键可以取消的,我们项目中通常正确的使用方法是点击周边不可取消而点击返回键取消加载框的同时也退出当前activity页面。这就需要我们给加载框添加一个返回键监听,下面就是正确给加载框添加返回键监听的代码:
private void initListenner() {
loadingDialog.setOnKeyListener(new DialogInterface.OnKeyListener() { //当加载框正在加载过程中点击返回键,取消加载框并退出当前activity
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP && event.getRepeatCount() == 0) {
LogUtils.i("initListenner--setOnKeyListener");
dialog.dismiss();
onBackPressed();
}
return true;
}
});
}