在TabActivity如何添加按鍵響應

我們知道,在普通的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_DOWNACTION_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);
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章