ViewPager中父Activity调用子Activity生命周期

项目中用到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中


代码片段,双击复制
01
02
03
04
05
06
07
08
09
public void invisibleOnScreen(){  
         log.d( "invisibleOnScreen" );  
           
    }  
       
    public void goneOnScreen(){  
         log.d( "goneOnScreen" );  
           
    }  

invisibleOnScreen相当于onResume,goneOnScreen相当于onPause

父Activity中

代码片段,双击复制
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
@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时已经使用
代码片段,双击复制
01
mActivityManager.startActivity(tag, intent).getDecorView()

来给每个子Activity设置tag了,所以可以直接用
代码片段,双击复制
01
mActivityManager.getActivity(A);

来获取子Activity

接下来在父Activity的onPause和OnPageChangeListener中手动调用子Acticity的伪生命周期函数即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值