我有一个TabHost
,里面有两个tabs
。我第一次切换到第二个tab
我调用的第二个onResume()
的{{1}}方法。然后我显示了tab's activity
,在它消失之后,'onResume()'方法没有被调用,但我真的在等它。我假设调用'AlertDialog'触发'onPause()'方法并且'onResume()'应该在实际显示'Activity'并准备好与用户交互之前调用。但是当我切换回另一个AlertDialog
的第一个tab
时,不会调用'onPause()'。
你能说一下为什么没有调用'onPause()'和'onResume()'方法,以及在显示'AlertDialog'或在activity
之间切换后调用哪些方法?
答案 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);
}
}
};