Android Activity切换与Activity间数据交互
在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间数据交互的更多相关文章
- 【python】-- 多进程的基本语法 、进程间数据交互与共享、进程锁和进程池的使用
多进程 进程之间是相互独立的,python是启动进程的时候,是启动的是原生进程.进程是没有GIL锁的,而且不存在锁的概念,进程之间的数据式不能共享的,而线程是可以的. 1.进程的定义 用mulipro ...
- 04 . Vue组件注册,组件间数据交互,调试工具及组件插槽介绍及使用
vue组件 组件(Component)是 Vue.js 最强大的功能之一. 组件可以扩展 HTML 元素,封装可重用的代码. 组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的 ...
- Android多任务切换与Activity启动模式SingleTask之间关系的分析
这里会以多个场景列子进行分析,在分析之前先了解一下基本的概念. Task任务:一系列Activity的集合,这些Activity以栈的形式进行排列(后进先出). 那在什么时候系统会新建一个Task任务 ...
- Python 进程间数据交互
进程间通信:进程之间必须需要中间件. 不同进程间内存是不共享的,要想实现两个进程间的数据交换 Queues:实现传输两个进程的数据 线程queue,访问数据只能在一个进程内进行线程与线程之间的 ...
- activity通过onActivityResult间数据交互
首先要创建2个activity 分别为MainActivity和OneActiivity MainActivity代码如下: package com.tp.soft.app; import andro ...
- Android中Fragment与Activity之间的交互(两种实现方式)
(未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如 ...
- 功能间(两个form)数据交互的编程方法
功能间数据交互的编程方法 现在框架具有在两个打开的功能之间进行通讯的机制.通讯是指,一个功能调用另外一个功能的方法,或者传递一些数据,并得到返回结果.比如处置单打开结算单,结算单保存后,将结算单号反填 ...
- 基于Xen实现一种domain0和domainU的应用层数据交互高效机制 - 2
继续昨天的思路,今天先google了类似的实现domain0和domainU之间数据传输的方案 [Xen-devel] XenStore as a data transfer path? 这篇帖子讨 ...
- 04 . Vue组件注册,数据交互,调试工具及组件插槽介绍及使用
vue组件 组件(Component)是 Vue.js 最强大的功能之一. 组件可以扩展 HTML 元素,封装可重用的代码. 组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的 ...
随机推荐
- Redis3.2.4 Cluster集群搭建
服务器环境:192.168.1.105192.168.1.160每台服务器搭建3个节点,组成3个主节点,3个从节点的redis集群. 注意:防火墙一定要开放监听的redis端口,否则会创建失败. 一. ...
- web api中访问数据库的内存释放问题
在使用web api开发微信后台的时候,本来想像MVC一样在controller中申明dbcontext全局变量,其它地方直接使用就可以了,结果调试过程中发现使用dbcontext访问数据库并获取qu ...
- [转]EasyUI 日期格式
本文转自:http://www.jeasyui.net/demo/512.html Different date formats are applied to different DateBox co ...
- Git(二)_基本命令
0. 开始查看所有配置:git config --listgit config --global user.name "runoob"git config --global use ...
- Maven包查询库
第一个: http://search.maven.org/ 第二个: http://mvnrepository.com/artifact/aspectj/aspectjweaver
- Mock session,cookie,querystring in ASB.NET MVC
写测试用例的时候经常发现,所写的功能需要Http上下文的支持(session,cookie)这类的. 以下介绍2种应用场景. 用于控制器内Requet获取参数 控制器内的Requet其实是控制器内的属 ...
- Centos 7 安装后设置
1.宽带连接 终端: nm-connection-editor 添加:DSL 另外一篇:Centos7宽带连接 2.输入法设置 设置-->区域和语言--> + -->搜索chines ...
- SparseArray类
继续阅读SparseArray的源码,从构造方法我们可以看出,它和一般的List一样,可以预先设置容器大小,默认的大小是10: public SparseArray() { this(10); } p ...
- 自定义MVC框架之工具类-模型类
截止目前已经改造了5个类: ubuntu:通过封装验证码类库一步步安装php的gd扩展 自定义MVC框架之工具类-分页类的封装 自定义MVC框架之工具类-文件上传类 自定义MVC框架之工具类-图像处理 ...
- HDU3062(2-SAT)
Party Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...