项目中用到ViewPager+Activity实现现在流行的滑屏效果。起初用的是ViewPager+Fragment,但因第一,我对Fragment还不太熟悉,暂没时间调研学习。第二,没搞定Fragment的动态加载。最终决定还是用ViewPager+Activity的方式。
确定思路后问题也就随之而来。ViewPager中的子Activity无法正确调用自己的onPause和onResume生命周期方法。Google后得知大概是ViewPager中的子Activity"只是用了activity的各个窗口样子,没有将它们加入到AMS中管理"。故无法正确调用生命周期方法。
首先我想到的是使用BroadCast来解决,但总觉得有小题大做的嫌疑。最终我的解决办法是自定义方法来模拟Activity的onResume和onPause,然后在ViewPager所在的父Activity中手动调用子Activity中自定义的伪生命周期方法。
废话不说,上代码:
某子Activity中
public void invisibleOnScreen(){
log.d("invisibleOnScreen");
}
public void goneOnScreen(){
log.d("goneOnScreen");
}
invisibleOnScreen相当于onResume,goneOnScreen相当于onPause
父Activity中
@Override
protected void onResume() {
super.onResume();
log.d("onResume");
mActivityManager.dispatchResume();
if(mViewPager != null){
switch (mViewPager.getCurrentItem()) {
case 0:
Activity _activity = mActivityManager.getActivity(A);
if(_activity != null && _activity instanceof MyActivity){
((MyActivity)_activity ).invisibleOnScreen();
}
break;
default:
break;
}
}
}
因为在给ViewPager设定Adapter时已经使用
mActivityManager.startActivity(tag, intent).getDecorView()
来给每个子Activity设置tag了,所以可以直接用
mActivityManager.getActivity(A);
来获取子Activity
接下来在父Activity的onPause和OnPageChangeListener中手动调用子Acticity的伪生命周期函数即可