2011-04-11 37 views
5

我有一個TabHost與其中兩個tabs它。第一次我切換到第二個tabonResume()方法我的第二個tab's activity調用。然後我顯示了一個AlertDialog,在它消失後,不會調用'onResume()'方法,但我真的等待它。我假定在'Activity'實際顯示並準備好與用戶交互之前,應調用'AlertDialog'觸發onPause()'方法和'onResume()'。但是,當我切換回第一個tab這是另一個activity時,不會調用onPause()。onResume()不觸發TabHost項目切換

你能否建議爲什麼不調用'onPause()'和'onResume()'方法,以及在顯示'AlertDialog'或在tabs之間切換後調用什麼方法?

回答

7

當你創建一個TabHost舉行活動,它裏面的兒童無法管理他們自己的生命週期方法(onResume,onPause,onCreated等)和父母(持有者)必須執行所有的管理。我已經通過覆蓋的onPause和的onResume在支架(定義tabhost活動)實施該行爲,像這樣:

@Override 
public void onPause() { 
    super.onPause(); 
    try { 
     mlam.dispatchPause(isFinishing()); 
    } catch (Exception e) {} 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    try { 
     mlam.dispatchResume(); 
    } catch (Exception e) {} 
} 

其中 「mlam」 是LocalActivityManager實例。有了它,我認爲你的onResume/onPause方法會被觸發。希望這能以某種方式幫助你。

+0

而且, LocalActivityManager mlam =新LocalActivityManager(ParentActivity.this,FALSE); \t \t mlam.dispatchCreate(savedInstanceState); \t \t yourTabHost.setup(mlam); 無論如何很好的答案mthama – 2012-06-13 12:37:19

1

我有同樣的問題,我也試試這個,它工作~~

private OnTabChangeListener TabChangeListener = new OnTabChangeListener() { 

    @Override 
    public void onTabChanged(String tabId) { 
     if (tabId.equals("download")){ 
      mlocalActivityManager.dispatchPause(isFinishing()); 
      mlocalActivityManager.dispatchResume(); 
      tabs.setCurrentTab(1); 
     } 
    } 
}; 
1

@ mthama的回答工作完全正常,並宣佈LocalActivityManager截至Tabhost級別的局部變量。但是,如果我只想要特定選項卡上的onResume()之一觸發,我按照以下方式執行。

protected void onResume() { 
    super.onResume();  
    try { 
     if(mLocalActivityManager != null){ 
      TabActivityOne tabActivity1 = (TabActivityOne) mLocalActivityManager.getActivity("tabId1"); 
      if(tabActivity1 != null){ 
       tabActivity1.onResume(); 
      } 
     }   
    } catch (Exception e) { 

    }    
} 
+0

對於誰留下負面評價的人,我會歡迎關於爲什麼它不起作用的反饋。 – HemanSuperman 2014-03-31 04:31:23