您的位置:首页 > 其它

关于ViewPager中子Activity生命周期 混乱的问题解决方案

2014-11-05 09:21 357 查看


关于ViewPager中子Activity生命周期 混乱的问题解决方案

标签: viewpage 子activity 生命周期混乱

做一个项目的时候,使用的viewpage+activity,刚开始没发现问题,后期发现子activity的onResume()方法一直不调用,从网上查了很多资料才找个解决方案。Google后得知大概是ViewPager中的子Activity"只是用了activity的各个窗口样子,没有将它们加入到AMS中管理"。故无法正确调用生命周期方法。从网上看的也有说通过广播来解决,但是我感觉不是很好,于是耗费了一天时间,在网上飞舞,当看到这位仁兄的见解,才让我茅塞顿开。解决办法是自定义方法来模拟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的伪生命周期函数即可
http://blog.csdn.net/guxiao1201/article/details/8887320
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: