2012-08-24 31 views
0

我有一個Tabhost,並且在該tabhost中有4個選項卡,每個選項卡中都有一個活動。當一個活動失去焦點時,我想用onDestroy或onPause方法來捕捉它。onDestroy或onPause未在TabHosts子項活動中調用

我試過了什麼?

  1. intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) - 這個方法調用子活動的onDestroy當標籤增益對焦(*%>?!),然後調用子活動的onCreate。

  2. 我已經覆蓋了幾乎所有的生命週期的保護功能,也finish()。但沒有發生。

  3. 我試過TabHosts onTabChanged函數,但我不能從tabhost檢索任何活動,我不能調用任何類似finish()的函數,所以它也失敗了。

請幫我解決這種情況!提前致謝。

編輯:

順便說一下,我擴展活動不TabActivity活動。

+0

這是父活動,在那些被重寫的方法onPause(),onDestroy()等上調用的TabActivity – Carnal

+0

好吧,但我可以擴展我的問題嗎?我有一個兒童活動計時器(在TabHost中)。我想抓住那個從這個活動中失去焦點的局面來阻止它。 –

+0

你的意思是當你切換到另一個選項卡時,你想停止它嗎? – Carnal

回答

1
tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() { 
    @Override 
    public void onTabChanged(String tabId) { 
     Activity currentActivity = getCurrentActivity(); 
     if (currentActivity instanceof TheActivity) { 
      // do nothing, we are here! 
     } 
     else { 
      ((TheActivity) currentActivity).methodToStopTimer(); 
     } 
    } 
}); 

或最常見的方式

tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() { 
    @Override 
    public void onTabChanged(String tabId) { 
     Activity currentActivity = getCurrentActivity(); 
     if (!currentActivity instanceof TheActivity) { 
      ((TheActivity) currentActivity).methodToStopTimer(); 
     } 
    } 
}); 

編輯:從我的頭頂我認爲方法是TabHost的一部分,但沒關係,只是檢查tabId所以你知道你是哪個活動:

if(!tabId.equals("idForYourActivity")){ 
    ActivityName.methodToStopTimer(); 
} 

你需要有methodToStopTimer()是靜態的。

+0

getCurrentActivity()和TheActivity無法識別活動 –

+0

「TheActivity」是我想出的一個名稱,那裏你應該把你的活動的名稱有定時器。 – Carnal

+0

那好吧,但getCurrentActivity()怎麼樣? –

0

做onStop()而不是銷燬;它適合您的方案:)嘗試和電話:)歡呼

+0

nope :(不工作,我已經嘗試了所有的生命週期 –

+0

你是否使用Explicit Intent切換標籤?如果是,然後在語句'startActivity(intent)'之前調用finish,然後使用onStop() –

+0

setContent(intent)使用TabSpec –

相關問題