我們知道,在普通的Activity中可以重寫onKeyDown(int keyCode, KeyEvent event)方法對手機按鍵進行監聽,而當要監聽的Activity爲TabActivity時(其實ListActivity也一樣),這個方法並不起作用。下面是解決辦法:
今天就爲這個事糾結了很久,正在開發的應用的首頁是一個TabActivity,當用戶按下返回鍵時會退出程序,而這可能是用戶無意而爲之的,所以當用戶按下返回鍵時要給一個提示。常規方法,像上文說的,重寫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("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0,
int arg1) {
arg0.cancel();
}
})
.setPositiveButton("確定",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
Main.this.finish();
}
});
AlertDialog alert = builder.create();
alert.show();
return false;
}
return super.dispatchKeyEvent(event);
};