2011-04-11 68 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