在Android程序内部, startActivity借助Intent来启动一个子Activity(使用父子关系进行表述,只为表达清晰,Android中并未有父子Activity的概念)。如下:

Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
说明:
1、LoginActivity.this 指明了Intent的上下文
2、MainActivity.class 指明了要启动的子Activity的class
3、Intent除了可以启动Activity外,还可用来启动Service、其他APP等
4、startActivity(intent)在执行后,当前Activity将被子Activity覆盖进入暂停状态;当子Activity被关闭时,之前被覆盖的父Activity恢复继续执行。 在父子Activity交替之际(启动子Activity时或父Activity恢复运行时),Android允许两个Activity之间进行数据交互。
1、给新启动的子Activity传递数据
如果给新启动的子Activity传递数据,只需要在Intent对象中加入key-value,key为准备传递数据的字符指示名称,value为准备传递的数据
intent.putExtra(“KEY",data);
startActivity(intent);

在子Activity中获取传递来的数据,如下:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DataType data= (DataType)getIntent().getDataTypeExtra(”KEY");
}

说明:

1、在onCreate中调用

2、DataType用你需要的数据类型替换

------------------------------------------------------------------------------------------------------------------------------------------

2、从子的Activity中返回数据

如果要在子Activity中返回数据,只需要在子Activity结束前通过Intent对象中加入key-value,如下:

Intent intent = new Intent();
intent.putExtra(“KEY”, data);
setResult(RESULT_OK, intent);
this.finish();

说明:

1、setResult(RESULT_OK, intent) 设置子Activity要返回父Activity(打开新Activity的Activity)的信息,RESULT_OK为int值,表子Activity成功执行完毕,intent里面就是包含要返回的数据。

2、记得要关闭哦 finish()在父Activity中如果要接收子Activity的返回结果,需要使用 startActivityForResult(intent, requestCode)打开子Activity,并且要重写 onActivityResult方法

打开子Activity并期待返回结果的代码如下:

............
Intent intent = new Intent(this, DrugLibActivity.class);
startActivityForResult(intent, 10);
............
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (10 == requestCode) {
int index = data.getIntExtra(KEY,0);
}
}

说明:

1、startActivityForResult 中 requestCode应该为>=0的数值(建议用常量替代更直观)

2、onActivityResult(int requestCode, int resultCode, Intent data)在子Activtiy关闭后,requestCode为启动子Activity时的requestCode值,resultCode为子Activity setResult中设置的值。

3、如果在同一个Activity中有多个地方可调用 startActivityForResult 打开多个子 Activity 的情况,那你应该在 onActivityResult 返回时判断 requestCode,这样你就能搞清楚是哪个子Activity返回了数据。

4、如果在 AndroidManifest.xml 中,你准备打开并接受返回值的子Activity 被设置为 android:launchMode="singleTask"。那很遗憾告诉你,当 startActivityForResult 调用后onActivityResult 会马上执行,而此时子窗体还未返回。

为什么会这样呢?这首先需要我们搞清楚什么是launchMode="singleTask"。

Android Activity切换与Activity间数据交互的更多相关文章

  1. 【python】-- 多进程的基本语法 、进程间数据交互与共享、进程锁和进程池的使用

    多进程 进程之间是相互独立的,python是启动进程的时候,是启动的是原生进程.进程是没有GIL锁的,而且不存在锁的概念,进程之间的数据式不能共享的,而线程是可以的. 1.进程的定义 用mulipro ...

  2. 04 . Vue组件注册,组件间数据交互,调试工具及组件插槽介绍及使用

    vue组件 组件(Component)是 Vue.js 最强大的功能之一. 组件可以扩展 HTML 元素,封装可重用的代码. 组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的 ...

  3. Android多任务切换与Activity启动模式SingleTask之间关系的分析

    这里会以多个场景列子进行分析,在分析之前先了解一下基本的概念. Task任务:一系列Activity的集合,这些Activity以栈的形式进行排列(后进先出). 那在什么时候系统会新建一个Task任务 ...

  4. Python 进程间数据交互

    进程间通信:进程之间必须需要中间件. 不同进程间内存是不共享的,要想实现两个进程间的数据交换     Queues:实现传输两个进程的数据 线程queue,访问数据只能在一个进程内进行线程与线程之间的 ...

  5. activity通过onActivityResult间数据交互

    首先要创建2个activity 分别为MainActivity和OneActiivity MainActivity代码如下: package com.tp.soft.app; import andro ...

  6. Android中Fragment与Activity之间的交互(两种实现方式)

    (未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如 ...

  7. 功能间(两个form)数据交互的编程方法

    功能间数据交互的编程方法 现在框架具有在两个打开的功能之间进行通讯的机制.通讯是指,一个功能调用另外一个功能的方法,或者传递一些数据,并得到返回结果.比如处置单打开结算单,结算单保存后,将结算单号反填 ...

  8. 基于Xen实现一种domain0和domainU的应用层数据交互高效机制 - 2

    继续昨天的思路,今天先google了类似的实现domain0和domainU之间数据传输的方案 [Xen-devel] XenStore as a data transfer path?  这篇帖子讨 ...

  9. 04 . Vue组件注册,数据交互,调试工具及组件插槽介绍及使用

    vue组件 组件(Component)是 Vue.js 最强大的功能之一. 组件可以扩展 HTML 元素,封装可重用的代码. 组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的 ...

随机推荐

  1. Redis3.2.4 Cluster集群搭建

    服务器环境:192.168.1.105192.168.1.160每台服务器搭建3个节点,组成3个主节点,3个从节点的redis集群. 注意:防火墙一定要开放监听的redis端口,否则会创建失败. 一. ...

  2. web api中访问数据库的内存释放问题

    在使用web api开发微信后台的时候,本来想像MVC一样在controller中申明dbcontext全局变量,其它地方直接使用就可以了,结果调试过程中发现使用dbcontext访问数据库并获取qu ...

  3. [转]EasyUI 日期格式

    本文转自:http://www.jeasyui.net/demo/512.html Different date formats are applied to different DateBox co ...

  4. Git(二)_基本命令

    0. 开始查看所有配置:git config --listgit config --global user.name "runoob"git config --global use ...

  5. Maven包查询库

    第一个: http://search.maven.org/ 第二个: http://mvnrepository.com/artifact/aspectj/aspectjweaver

  6. Mock session,cookie,querystring in ASB.NET MVC

    写测试用例的时候经常发现,所写的功能需要Http上下文的支持(session,cookie)这类的. 以下介绍2种应用场景. 用于控制器内Requet获取参数 控制器内的Requet其实是控制器内的属 ...

  7. Centos 7 安装后设置

    1.宽带连接 终端: nm-connection-editor 添加:DSL 另外一篇:Centos7宽带连接 2.输入法设置 设置-->区域和语言--> + -->搜索chines ...

  8. SparseArray类

    继续阅读SparseArray的源码,从构造方法我们可以看出,它和一般的List一样,可以预先设置容器大小,默认的大小是10: public SparseArray() { this(10); } p ...

  9. 自定义MVC框架之工具类-模型类

    截止目前已经改造了5个类: ubuntu:通过封装验证码类库一步步安装php的gd扩展 自定义MVC框架之工具类-分页类的封装 自定义MVC框架之工具类-文件上传类 自定义MVC框架之工具类-图像处理 ...

  10. HDU3062(2-SAT)

    Party Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...