您的位置:首页 > 其它

startActivityForResult+onActivityResult+setResult

2016-02-16 00:53 387 查看
整体思路:MainActivity 中有2个Buttton ,点击后开启 ActivityA+ActivityB,并将MainActivity 中的值通过intent传递给 ActivityA+ActivityB,当关闭ActivityB页面是,在将B中的数据传递给MainActivity.

涉及到的方法:

startActivityForResult(Intent intent, int requestCode )

onActivityResult(int requestCode ,int resultCode, Intent data)

setResult(int resultCode,intent intent)

其中,前2个方法是在开启 页面中的,即MainActivity

最后一个是在被开启的页面中,ActivityA +ActivityB

方法介绍:

startActivityForResult(Intent intent, int requestCode )用于开启activity,并将被开启的activity的在其关闭前 将值放返回给开启者。

本例中,MainActivity 调用这个方法,开启ActivityB,ActivityB关闭前将自己的某些数据通过intent传递个MainActivity.

setResult(int resulttCode,intent intent):返回数据

本例中,ActivityB调用这个方法将数据返回给MainActivity

onActivityResult(int requestCode ,int resultCode, Intent data)用于接收返回的数据

本例中,MainActivity 调用这个方法接收ActivityB传递过来的数据。

参数介绍:

requestCode:请求码,开启页面的时候使用startActivityForResult(Intent intent, int requestCode )

resultCode:返回码,返回数据的时候使用setResult(int resultCode,intent intent)

通过resultCode/requestCode都做判断,并加以处理

一般情况下,通过判断resultCode接收返回的数据。





代码:

开启界面

btn2.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent(context, ActB.class);
				intent.putExtra("age", 27);
				startActivityForResult(intent, 2);
			}
		});


接收返回值

/**一般根据resultCode判断 :是哪个activity返回的数据
	 * requestCode用的少,除非MainActivity中2个Button打卡同一个页面,而resultCode又相同,这就需要requetCoce判断*/
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		
		switch (resultCode) {
		case 10:
			String uid = data.getStringExtra("uid");
			Log.i(TAG, "###UID="+uid);
			break;
		case 22:
			int age  = data.getIntExtra("age", 20);
			Log.i(TAG, "###AGE="+age);
			break;
		default:
			break;
		}
//		super.onActivityResult(requestCode, resultCode, data);//空方法
	}
传递返回值:

重写
onBackPressed()方法,是因为<span style="white-space: pre;">setResult(int resulttCode,intent intent)</span>:这个方法必须在finish()前。


@Override
	public void onBackPressed() {
		Intent data = new  Intent();
		data.putExtra("age",25);
		setResult(22, data);
		super.onBackPressed();
	}


代码:源码

参考:http://www.cnblogs.com/lijunamneg/archive/2013/02/05/2892616.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: