在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. 解决Silverlight F5刷新问题

    最近在做一个SL的项目,做完后,遇到一个F5刷新的问题,本人也是第一次接触接触SL项目,记得再ASP.NET浏览器的缓存会自动保存最后一次的浏览记录的. 所以就在网上到处找资料,可惜运气不好,都没找到 ...

  2. 【Java初探02】——Java语言基础

    本篇博文就Java语言的一些基本元素进行一些记录和阐述,主要讲解一下Java语言的一些基本构成元素和Java的主类结构. Java语言基础的大致组成 java主类结构 基本的数据类型 变量与常量 运算 ...

  3. Chapter 3 Phenomenon——21

    "Nobody will believe that, you know." “你知道吗没有人会相信会是这样的” His voice held an edge of derision ...

  4. IDA动态调试so文件出现SIGILL

    用ida6.6 调试android的so文件时经常会报SIGILL的错误,意思是指令非法.而且这种错误基本都是发生在系统函数内部,像我遇到过的mmap,fopen,fgets等等.在这些函数内部如果用 ...

  5. 【详解】JNI(Java Native Interface)(一)

    前言: 一提到JNI,多数编程者会下意识地感受到一种无法言喻的恐惧.它给人的第一感觉就是"难",因为它不是单纯地在JVM环境内操作Java代码,而是跳出虚拟机与其他编程语言进行交互 ...

  6. Linux后台运行java的jar包

    Linux 运行jar包命令如下: 方式一 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 java -jar shareniu. ...

  7. 各大语言性能对比PK数据

    这里我用的python版本是Python 3.6.2(64位),php版本是PHP 7.0.12(64位),node版本是v6.11.0(64位),Go 1.8.3(64位),C# 基于.Net 4. ...

  8. 拥抱HTML5

    HTNL5是2014年10月W3C推出的新标准,引入新的特性并对移动端更加友好. canvas <canvas>标签用于标记画布元素, 使用js脚本可以在画布上绘制自定义图形. 绘制矩形; ...

  9. flex弹性布局学习总结

    本文首次发布在我的个人博客:Claiyre的个人博客 https://claiyre.github.io/ 博客园地址:http://www.cnblogs.com/nuannuan7362/如需转载 ...

  10. 基于spring boot的定时器

    首先,搭建好一个springboot项目 方法一:通过springboot自带入口来开启定时器. 首先我们都知道,springboot有一个自己的入口,也就是@SpringBootApplicatio ...