android finish()传参数,Android 使用intent传递返回值:startActivityForResult()与onActivityResult()与setResult()参数分...

在一个父Activity通过intent跳转至多个不同子Activity上去,当子模块的代码执行完毕后再次返回父页面,将子activity中得到的数据显示在主界面/完成的数据交给父Activity处理。这种带数据的intent跳转需要使用activity的onActivityResult()方法。

(1)startActivityForResult(Intent intent, int requestCode);

第一个参数:一个Intent对象,用于携带将跳转至下一个界面中使用的数据,使用putExtra(A,B)方法,此处存储的数据类型特别多,基本类型全部支持。

第二个参数:如果> = 0,当Activity结束时requestCode将归还在onActivityResult()中。以便确定返回的数据是从哪个Activity中返回,用来标识目标activity。

因此,如果想要标识返回值是从哪个页面返回的,就要给每个页面的requestCode设置为不同的值;

(2)onActivityResult(int requestCode, int resultCode, Intent data)

第一个参数:这个整数requestCode用于与startActivityForResult中的requestCode中值进行比较判断,是以便确认返回的数据是从哪个Activity返回的。

第二个参数:这整数resultCode是由子Activity通过其setResult()方法返回。用于标识从requestCode所标识的页面返回的数据的返回值;

第三个参数:一个Intent对象,带有返回的数据。可以通过data.getXxxExtra( );方法来获取指定数据类型的数据;

一个页面可能有不同的返回值,通过resultCode区分页面的返回值,类似于请求url可以获取到不同的返回值;而requestCode则表示确实是从你请求的页面返回的结果;

在判断时,可根据实际需求进行判断,可以先判断resultCode,也可以先判断requestCode

(3)setResult(int resultCode, Intent data)

在intent跳转的目的地界面调用这个方法把Activity想要返回的数据返回到主Activity,即子activity页面

第一个参数:当Activity结束时resultCode将归还在onActivityResult()中,用于双方协定返回码;

第二个参数:一个Intent对象,返回给主Activity的数据。在intent对象携带了要返回的数据,使用putExtra( )方法。即该resultCode所携带的数据;

注意:

1. 一个页面最多只能有一个onActivityResult(),因为这个是拿到结果的地方;根据不同页面(requestCode )返回的不同结果(resultCode)来获取想要的结果;

2. 一个页面可以有多个startActivityForResult(), 因为可以从一个页面的不同组件跳转至不同的页面;startActivityForResult()实际就是启动intent跳转,因此不需要另外使用别的跳转;

3. 一个页面最多可以有多个setResult(), 因为这个是返回码和返回值,可以有多个返回码和返回值;该页面的intent跳转不需要传入要返回到哪个页面;

4.  setResult()后面需要调用finish()结束当前的activity;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`startActivityForResult()` 方法用于启动另一个 Activity 并且期望该 Activity 返回结果。使用该方法时需要传递两个参数: 1. `Intent` 对象:用于指定要启动的 Activity。 2. `int` 类型的请求代码(requestCode):用于标识该请求。 启动 Activity 后,如果该 Activity 调用了 `setResult()` 方法并且将结果返回给了当前 Activity,那么系统会调用当前 Activity 的 `onActivityResult()` 方法,并将结果传递给该方法。 以下是使用 `startActivityForResult()` 方法的示例代码: ```java // 在当前 Activity 中启动另一个 Activity传递请求码 // 请求码可以是任意整,在 onActivityResult() 方法中用于标识该请求 Intent intent = new Intent(this, AnotherActivity.class); int requestCode = 1; startActivityForResult(intent, requestCode); ``` 在启动的 Activity 中,如果需要返回结果,可以通过 `setResult()` 方法将结果传递给当前 Activity: ```java // 在启动的 Activity 中设置返回结果并关闭该 Activity Intent data = new Intent(); data.putExtra("result", "Hello, world!"); setResult(RESULT_OK, data); finish(); ``` 在当前 Activity 中,可以通过 `onActivityResult()` 方法获取结果: ```java // 在当前 Activity 中处理返回结果 @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1 && resultCode == RESULT_OK) { // 获取返回结果 String result = data.getStringExtra("result"); // 处理返回结果 // ... } } ``` 需要注意的是,如果启动的 Activity 在返回结果时调用了 `finish()` 方法关闭了自身,则当前 Activity 的 `onActivityResult()` 方法不会被调用。因此,在启动的 Activity 中应该在返回结果之前先判断是否需要关闭自身。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值