使用Intent在Activity与Fragment之间传递数据中存在的返回键错乱问题

Android中的Intent相信大家都不陌生,它在Android中起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。


一般要实现界面间的跳转,大家都会马上想到Intent,那么Intent怎么在Fragment和Activity中应用,实现两种界面之间的跳转呢?下面贴段代码解释一下:

//这是从Fragment跳转到AActivity,需要获取Fragment所在的Activity来启动Intent
Intent intent = new Intent();
		intent.setClass(getActivity(), AActivity.class);
		intent.putExtra("intent_A", "你好,我是A");
		getActivity().startActivity(intent);


//这是AActivity跳转了多次到CActivity,现在要从CActivity跳转回刚才的Fragment的代码,由于Fragment只是一个片段,所以只能跳转到承载它的MainActivity上
Intent intent = new Intent();
				intent.setClass(getApplicationContext(), MainActivity.class);
				intent.putExtra("intent_fragmentId", MainActivity.TAB_1);								
				startActivity(intent);
				finish();

 

再从承载Fragment的MainActivity上启动该Fragment,代码如下:

@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		//getIntExtra的原型为getIntExtra(String name, int defaultValue),其中defaultValue为当name对应的值为null时设置的默认值

		int id = getIntent().getIntExtra("intent_fragmentId", -1);
		
		if (id == TAB_1) {
			viewPager.setCurrentItem(TAB_1, true);
		}
	}

网上给出的代码大多数到这里就结束了,会跟你说Activity与Fragment直接的跳转就是这样,但实际上这样做会出现问题,就是当你进入到CActivity,结束了当前的操作,跳转到该Fragment之后,只要你执行了这个过程,你就会发现返回键会出现bug,无论你现在进到哪个页面,只要我点击返回键(手机自带的或者左上角的)就会跳到这个Fragment中,那么是什么原因导致这个问题呢?

是因为上面这句话getIntent().getIntExtra("intent_fragmentId", -1);这个额外的Int型数据一直都存在,就像你给一个int型的全局变量赋值之后,无论在哪个地方(当然是在这个全局变量的作用域内)你调用这个全局变量,你都仍然可以获得它的值,以此类推,为了不再强制性的取得这个id,我们应该把intent中的数据移除掉。

根据这个思路,我在上面OnResume函数中添加了一句话,变成下面的代码就可以了。

@Override

	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		//getIntExtra的原型为getIntExtra(String name, int defaultValue),其中defaultValue为当name对应的值为null时设置的默认值

		int id = getIntent().getIntExtra("intent_fragmentId", -1);
		
		if (id == TAB_1) {
			viewPager.setCurrentItem(TAB_1, true);
		}
		getIntent().removeExtra("intent_fragmentId");
	}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值