2010-05-08 57 views
4

我有一個TabActivity,想抓住並處理HOME和BACK的按下。我需要在哪裏捕捉這些事件?TabActivities中的關鍵事件?

在我TabActivity的子類,我實現了以下內容:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    switch (keyCode) { 
     // Code handling 
    } 

    return super.onKeyDown(keyCode, event); 
} 

沒有工作。

所以我在switch語句行中放置了一個斷點。但是這個功能從來沒有被調用,無論是按音量增加/減少,菜單,家庭或回來。我需要在哪裏捕獲這些KeyEvent?

回答

2

每個選項卡的活動都處理「返回」按鍵。

0

我有一個TabActivity,想抓 並處理HOME和BACK的按下。 我需要在哪裏捕捉這些事件?

你不能「處理家庭壓力」,永遠。

對於BACK,您可以使用onKeyDown()(對於Android 1.x)或onBackPressed()(對於Android 2.x)。但是,您的TabActivity可能爲時已晚。例如,如果您有活動作爲選項卡的內容,則可能是其中一個人正在捕獲BACK按鈕並安排正常處理(即關閉活動)。由於我避免像瘟疫一樣的活動(除了一本書的例子),我還沒有在這種情況下嘗試使用BACK按鈕處理。

+0

我正在開發1.5,所以我重寫'的onkeydown()'。我*爲每個標籤使用活動,甚至嘗試在我的特定標籤活動中重寫。然而,它仍然從未觸發過'onKeyDown()'函數。 – stormin986 2010-05-09 01:02:17

+0

那我就不知道了。考慮切換爲將視圖而不是活動視爲選項卡的內容。這不僅可以節省大量系統資源,而且還可以簡化關鍵事件流程,從而使TabActivity能夠獲得onKeyDown()調用。 – CommonsWare 2010-05-09 11:16:45

+0

我們已經找到了處理Home事件的方法[這裏](http://stackoverflow.com/questions/10025660/override-home-and-back-button-is-case-a-boolean-is-true/10025904 #10025904) – 2012-04-11 06:49:57

29

它原來是很容易的。下面的代碼添加到您的孩子標籤活動:

@Override 
    public void onBackPressed() { 
    this.getParent().onBackPressed(); 
    } 

然後在TabActivity做真正的邏輯:

@Override 
    public void onBackPressed() { 
    // Called by children 
    } 

否則,孩子會攔截並沒有通知接頭主機消耗事件。

+0

這個工程!謝謝! – jxdwinter 2012-12-17 14:41:22

+0

作品!謝謝史蒂夫。 – 2013-02-02 06:55:51

+0

雖然你沒有救過我的一天,但你肯定保存了我的夜晚...... – 2015-01-15 13:06:17

0

試試這個在您的oncreate()

setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL); 
setDefaultKeyMode(DEFAULT_KEYS_SEARCH_GLOBAL);