博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android基础:startActivityForResult+onActivityResult+setResult
阅读量:4131 次
发布时间:2019-05-25

本文共 2198 字,大约阅读时间需要 7 分钟。

整体思路: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)用于接收返回的数据,activityB退出的时候,此方法开启。

 本例中,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);//空方法	}
传递返回值:

重写onBackPresed()方法,是因为super.onBackPressed()中调用finish()方法,所以我们可以在super.onBackPressed()前设置返回值(调用setResult())

@Override	public void onBackPressed() {		Log.d("tag", "onBackPressed");		Intent intent = new Intent();		intent.putExtra("age", "60");		setResult(2, intent);		super.onBackPressed();	}

注意:如果其他地方调用了finishs()方法,那么就不会调用onBackPresed(),我们可以在调用finish()方法前调用setResult()。demo:

代码:

参考:http://www.cnblogs.com/lijunamneg/archive/2013/02/05/2892616.html

你可能感兴趣的文章
搞笑--一篇有趣的文章编译自一篇西班牙博客。有一位美丽的公主,被关押在一个城堡中最高的塔上,一条凶恶的巨龙看守着她,需要有一位勇士营救她…
查看>>
非常不错 Hadoop 的HDFS (Hadoop集群(第8期)_HDFS初探之旅)
查看>>
Tomcat启动错误,端口占用
查看>>
laravel 修改api返回默认的异常处理
查看>>
高德坐标转换百度坐标 javascript
查看>>
tp5封装通用的修改某列值
查看>>
laravel控制器与模型名称不统一
查看>>
vue登录拦截
查看>>
npm配置淘宝镜像仓库以及electron镜像
查看>>
linux设置开机自启动脚本的最佳方式
查看>>
VUE SPA 单页面应用 微信oauth网页授权
查看>>
phpstorm 集成 xdebug 进行调试
查看>>
npm和node升级的正确方式
查看>>
laravel事务
查看>>
springcloud 连续请求 500
查看>>
vue复用新增和编辑表单
查看>>
Ubuntu 16.04 apt-get更换为国内阿里云源
查看>>
laravel部署到宝塔步骤
查看>>
小程序获取access_token
查看>>
navicat远程连接mysql数据库
查看>>