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

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

标签: viewpage 子activity 生命周期混乱
做一个项目的时候,使用的viewpage+activity,刚开始没发现问题,后期发现子activity的onResume()方法一直不调用,从网上查了很多资料才找个解决方案。Google后得知大概是ViewPager中的子Activity"只是用了activity的各个窗口样子,没有将它们加入到AMS中管理"。故无法正确调用生命周期方法。从网上看的也有说通过广播来解决,但是我感觉不是很好,于是耗费了一天时间,在网上飞舞,当看到这位仁兄的见解,才让我茅塞顿开。解决办法是自定义方法来模拟Activity的onResume和onPause,然后在ViewPager所在的父Activity中手动调用子Activity中自定义的伪生命周期方法。

废话不说,上代码:

某子Activity中

  1. public void invisibleOnScreen(){  
  2.         log.d("invisibleOnScreen");  
  3.           
  4.     }  
  5.       
  6.     public void goneOnScreen(){  
  7.         log.d("goneOnScreen");  
  8.           
  9.     }  
invisibleOnScreen相当于onResume,goneOnScreen相当于onPause

父Activity中

  1. @Override  
  2.     protected void onResume() {  
  3.         super.onResume();  
  4.         log.d("onResume");  
  5.         mActivityManager.dispatchResume();  
  6.         if(mViewPager != null){  
  7.             switch (mViewPager.getCurrentItem()) {  
  8.             case 0:  
  9.                 Activity _activity = mActivityManager.getActivity(A);  
  10.                 if(_activity != null && _activity instanceof MyActivity){  
  11.                     ((MyActivity)_activity ).invisibleOnScreen();  
  12.                 }  
  13.                 break;  
  14.               
  15.             default:  
  16.                 break;  
  17.             }  
  18.         }  
  19.     }  
因为在给ViewPager设定Adapter时已经使用
  1. mActivityManager.startActivity(tag, intent).getDecorView()  
来给每个子Activity设置tag了,所以可以直接用
  1. mActivityManager.getActivity(A);  
来获取子Activity 接下来在父Activity的onPause和OnPageChangeListener中手动调用子Acticity的伪生命周期函数即可



http://blog.csdn.net/guxiao1201/article/details/8887320
上一篇:WEB 容器|学习笔记


下一篇:- (BOOL)setResourceValue:(id)value forKey:(NSString *)key error:(NSError **)error