欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Android利用startActivityForResult返回数据到前一个Activity

程序员文章站 2022-05-07 17:18:57
在android里面,从一个activity跳转到另一个activity、再返回,前一个activity默认是能够保存数据和状态的。但这次我想通过利用startactivityforresult达到相...

在android里面,从一个activity跳转到另一个activity、再返回,前一个activity默认是能够保存数据和状态的。但这次我想通过利用startactivityforresult达到相同的目的,虽然看起来变复杂了,但可以探索下startactivityforresult背后的原理和使用注意事项。

要实现的功能如下:

从activity a将数据传到activity b,再从activity b中获取数据后,再传回activity a。在activity b中添加一个“回到上一页”的button,返回到activity a之后,需要保留之前输入的相关信息,我们用startactivityforresult来拉起activity b,这样,activity a就会有一个等待activity b的返回。

具体步骤如下:

  1. 在activity a中有一个button,点击button后,获取要传到activity b的数据,将数据封装到bundle中,再调用startactivityforresult将数据传到activity b
  2. activity a 重写onactivityresult函数,判断requestcode和resultcode是否是我们预期的结果,如果是,那么从bundle中获取数据,重新显示在activity a中
  3. 在activity b中获取activity a传过去的intent对象,并取出bundle对象,再从bundle中取出数据字段,显示在当前页面
  4. activity b中也有一个button,点击button后,调用setresult传回结果,并关闭当前页面。因此,看起来的效果就是回到了activity a

源码如下:

1、activity a的实现:

2、布局文件main_page_layout.xml:

3、activity b的实现:

4、activity b的布局:

不过这里有3个地方需要注意:

1.startactivityforresult的第二个参数requestcode传的是0,那么我们分别看下传递的值小于0和大于0是什么结果:
(1)传一个小于0的值,比如-1:等同于调用 startactivity,onactivityresult不会被调用
(2)传一个大于0的值,比如1:效果等同于传0,onactivityresult的第一个参数正是我们通过startactivityforresult传递的requestcode

2.onactivityresult的第二个参数resultcode:它是第二个activity通过setresult返回的,常用的取值有2个:result_canceled、result_ok
(1)result_canceled:activity b拉起失败,比如crash
(2)result_ok:activity b操作成功后的返回值

    还有一个不太常用的取值:result_first_user,android源码对这个取值的定义是“user-defined activity results”(用户自定义的),我在源码中全局搜索了下,用的地方不多,挑了一两个使用的地方:

(1)packageinstaller下面的installfailed.java(安装apk失败的相关页面)

(2)packageinstaller下面的installstaging.java

    packageinstaller下面的uninstalleractivity.java(卸载apk的相关页面):在oncreate方法里面有多处设置为result_first_user。
因此,我的理解是业务自身在一些错误或无效的场景下使用,由业务自己定义。

    3. 如果启动activity b时设置了new_task启动模式,进入activity b后,activity a会立即回调onactivityresult,而且resultcode是0;从activity b setresult返回后,不再有onactivityresult的回调!

以上就是android利用startactivityforresult返回数据到前一个activity的详细内容,更多关于android 返回数据到前一个activity的资料请关注其它相关文章!