重写
onKeyDown(int keyCode, KeyEvent event),根本不起作用;又发现SDK2.0以后新增了一个专门针对返回键的方法onBackPressed(),还是不起作用。google了很久,也没发现什么好的解决办法。只有自己动手了,打开SDK文档,仔细看了一下,发现有一个
dispatchKeyEvent(KeyEvent event),一试果然管用,下面是一段示例代码,注意在if判断中要加一个
event.getAction() == KeyEvent.ACTION_DOWN判断,因为按键有两个事件
ACTION_DOWN和
ACTION_UP,也就是按下和松开,如果不加这个判断,代码会执行两遍,而在下面的代码中就是弹两次AlertDialog。
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage("您确定退出吗?") .setTitle("友情提示") .setNegativeButton("取消", newDialogInterface.OnClickListener() { @Override
public void onClick(DialogInterface arg0, int arg1) { arg0.cancel(); } }) .setPositiveButton("确定", newDialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int id) {
Main.this.finish();
}
}
);
AlertDialog alert = builder.create();
alert.show();
return false; }
return super.dispatchKeyEvent(event);
};
转自:http://hi.baidu.com/zkgg133/blog/item/0fcfbc3de2218a1bbba16744.html