项目中用到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中
代码片段,双击复制 010203040506070809public
void
invisibleOnScreen(){
log.d(
"invisibleOnScreen"
);
}
public
void
goneOnScreen(){
log.d(
"goneOnScreen"
);
}
invisibleOnScreen相当于onResume,goneOnScreen相当于onPause父Activity中
代码片段,双击复制 01020304050607080910111213141516171819@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时已经使用
代码片段,双击复制 01mActivityManager.startActivity(tag, intent).getDecorView()
来给每个子Activity设置tag了,所以可以直接用
代码片段,双击复制 01mActivityManager.getActivity(A);
来获取子Activity接下来在父Activity的onPause和OnPageChangeListener中手动调用子Acticity的伪生命周期函数即可
ViewPager中父Activity调用子Activity生命周期
最新推荐文章于 2021-05-29 22:58:59 发布