onResume()没有触发TabHost项目切换

时间:2011-04-11 12:54:37

标签: android android-tabhost

我有一个TabHost,里面有两个tabs。我第一次切换到第二个tab我调用的第二个onResume()的{​​{1}}方法。然后我显示了tab's activity,在它消失之后,'onResume()'方法没有被调用,但我真的在等它。我假设调用'AlertDialog'触发'onPause()'方法并且'onResume()'应该在实际显示'Activity'并准备好与用户交互之前调用。但是当我切换回另一个AlertDialog的第一个tab时,不会调用'onPause()'。

你能说一下为什么没有调用'onPause()'和'onResume()'方法,以及在显示'AlertDialog'或在activity之间切换后调用哪些方法?

4 个答案:

答案 0 :(得分:7)

当您创建TabHost以保存活动时,其中的子项无法管理自己的生命周期方法(onResume,onPause,onCreated等),并且父(持有者)必须执行所有管理。我通过覆盖持有者中的onPause和onResume(定义tabhost的Activity)实现了这种行为,如下所示:

@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方法将被触发。希望这能以某种方式帮助你。

答案 1 :(得分:2)

@ 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) {

    }               
}

答案 2 :(得分:1)

  

我认为调用'AlertDialog'会触发'onPause()'方法,而'onResume()'应该在'Activity'实际显示并准备好与用户交互之前调用

AlertDialog不会影响活动的生命周期。

Check out the Activity's Life Cycle Flow Chart Here.

在标签之间切换时,如果您想要一个回叫方法,为什么不使用TabChanged Listener

答案 3 :(得分:1)

我有同样的问题,我试试这个,它可以工作~~

private OnTabChangeListener TabChangeListener = new OnTabChangeListener() {

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