做一个项目的时候,使用的viewpage+activity,刚开始没发现问题,后期发现子activity的onResume()方法一直不调用,从网上查了很多资料才找个解决方案。Google后得知大概是ViewPager中的子Activity"只是用了activity的各个窗口样子,没有将它们加入到AMS中管理"。故无法正确调用生命周期方法。从网上看的也有说通过广播来解决,但是我感觉不是很好,于是耗费了一天时间,在网上飞舞,当看到这位仁兄的见解,才让我茅塞顿开。解决办法是自定义方法来模拟Activity的onResume和onPause,然后在ViewPager所在的父Activity中手动调用子Activity中自定义的伪生命周期方法。
invisibleOnScreen相当于onResume,goneOnScreen相当于onPause
因为在给ViewPager设定Adapter时已经使用
来给每个子Activity设置tag了,所以可以直接用
来获取子Activity 接下来在父Activity的onPause和OnPageChangeListener中手动调用子Acticity的伪生命周期函数即可
http://blog.csdn.net/guxiao1201/article/details/8887320
废话不说,上代码:
某子Activity中
- public void invisibleOnScreen(){
- log.d("invisibleOnScreen");
- }
- public void goneOnScreen(){
- log.d("goneOnScreen");
- }
父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;
- }
- }
- }
- mActivityManager.startActivity(tag, intent).getDecorView()
- mActivityManager.getActivity(A);
http://blog.csdn.net/guxiao1201/article/details/8887320