onDestroy或onPause未在TabHosts子活动中调用

时间:2012-08-24 13:21:49

标签: android android-tabhost

我有一个Tabhost,在该tabhost中有4个选项卡,每个选项卡中都有一个活动。当一个活动失去焦点时,我想用onDestroy或onPause方法捕获它。

我尝试了什么?

  1. intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) - 当标签获得焦点(?!*%>)然后调用子活动的onCreate时,此方法调用子活动的onDestroy。

  2. 我已经覆盖了生命周期中几乎所有受保护的函数以及finish()。但什么都没发生。

  3. 我已经尝试过TabHosts onTabChanged函数,但是我无法从tabhost中检索任何活动而且我无法调用任何finish() - 就像函数一样,所以它也失败了。

  4. 请帮我解决这个问题!!提前谢谢。

    编辑:

    顺便说一句,我正在扩展Activity而不是TabActivity。

2 个答案:

答案 0 :(得分: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()设为静态。

答案 1 :(得分:0)

在onStop()中执行,而不是在destroy;它适合你的场景:)尝试和电话:)欢呼