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中

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的伪生命周期函数即可



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值