启动普通子Activity:

一个activity启动另一个activity最简单的方式是使用 startActivity(Intent) 方法:

public void startActivity(Intent intent)

activity调用 startActivity 方法时,调用请求实际发给了操作系统的 ActivityManager ,ActivityManager 负责创建 Activity 实例,并调用其 onCreate 方法。

ActivityManager 根据 startActivity(Intent) 方法传入的 Intent 对象来识别要启动哪个 activity ,Intent有多个构造函数,以适应不同的需求。例如:

public Intent(Context packageContext, Class<?> cls)

方法中的第二个 Class 类型参数告诉 ActivityManager 应该启动哪个 activity 。Context 参数告诉 ActivityManager 在哪里可以找到它,例如:

Intent intent = new Intent(QuizActivity.this, CheatActivity.class);
startActivity(intent);

上面启动 activity 的方式,使用的是显示 Intent 。

使用 Intent 对象在 Activity 之间传递信息。要向 Intent 对象中添加信息,需要调用 putExtra 方法,例如:

public Intent putExtra(String name, boolean value)

该方法有多种参数形式,但它总是有两个参数,第一个参数固定为 String 类型的键,第二个参数是值(可以是各种数据类型), 该方法返回 Intent 对象本身,因此可以进行链式调用。

推荐的最佳实践:第一个参数使用被启动类中定义的常量(该常量由被启动类的全路径和键名组成),例如:

private static final String EXTRA_ANSWER_IS_TRUE = "com.example.geoquiz.QuizActivity.answer_is_true";

这样可以避免来自不同应用的 extra 间发生命名冲突。

启动有返回信息的子activity:

1. 启动方法:

需要从子被启动的子Activity获取返回结果时,使用 startActivityForResult(Intent intent, int requestCode) 方法:

public void startActivityForResult(Intent intent, int requestCode)

该方法第一个参数是 Intent对象;第二个参数是 请求码(请求码是由用户定义的先发送给子 activity,然后在返回给父 activity 的整数值)。

在一个 activity 中启动多个不同类型的子 activity,且需要判断消息返回方时,就需要用到请求码。例如:

//定义请求码常量
private static final int REQUEST_CODE_CHEAT = 0; //使用 startActivityForResult 方法启动子 activity
startActivityForResult(intent, REQUEST_CODE_CHEAT);

2. 子Activity设置返回值:

实现子activity返回信息给父activity,有如下两个方法可用:

public final void setResult(int resultCode)
public final void setResult(int resultCode, Intent data)

参数 resultCode 可以是一下任意一个预定义常量:

Activity.RESULT_OK

Activity.RESULT_CANCELED

如果需要向父 activity 传递信息,则创建一个 Intent 对象,调用 activity 对象的 setResult(int, Intent) 方法将信息传递给父 activity ;如果不需要传递信息,则不用 Intent 。

3. 获取返回信息:

重写父 activity 中的 onActivityResult(int, int, Intent) 方法,来处理返回结果:

protected void onActivityResult(int requestCode, int resultCode, Intent intent)

该方法由系统调用,并传入3个参数:
  requestCode: 请求码,用于识别是启动的哪个子activity返回的信息

  resultCode: 结果码,用于识别子activity执行的操作是否成功(识别执行结果状态)

  intent: 传递信息的 Intent 对象,用于向父 activity 返回信息

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
/*
* @requestCode: 请求码,标识由哪个子activity返回
* @resultCode: 结果码,标识子activity执行的结果状态(常用 Activity.RESULT_OK: 表示成功; Activity.RESULT_CANCELED: 表示失败)
* @data: Intent对象,用于传递信息
* */
if (resultCode == Activity.RESULT_OK && requestCode == RESULT_CODE_CHEAT) {
if (data != null) {
boolean wasAnswerShown = CheatActivity.wasAnswerShown(data);
mQuestionBank[mCurrentIndex].setCheated(wasAnswerShown);
}
}
}

启动子Activity的更多相关文章

  1. Android 子activity关闭 向父activity传值

    使用startActivity方式启动的Activity和它的父Activity无关,当它关闭时也不会提供任何反馈. 可变通的,你可以启动一个Activity作为子Activity,它与父Activi ...

  2. 启动另外一个activity,并返回结果

    欢迎大家光临我的小店:http://clkk.taobao.com 大致步骤: 1.启动另外一个Activity,这里称子Activity: 2.子Activity通过setResult方法设置返回结 ...

  3. Activity的介绍

    Activity类是Android应用程序的重要组成部分,activity的启动和组合方式是平台应用程序模型的基本组成部分.Android系统通过调用与其生命周期的特定阶段相对应的特定回调方法来启动A ...

  4. Android Activity切换与Activity间数据交互

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

  5. 介绍activity文档翻译

    原文链接:https://developer.android.google.cn/guide/components/activities/intro-activitiesSS 一, 对activit的 ...

  6. Intent获取Activity返回值

    /* Intent获取Activity返回值* 三步:* 子Activity关闭后的返回值处理函数,requestCode是子Activity返回的请求码,与页面顶端的两个请求码相匹配,resultC ...

  7. Android开发笔记(8)——调用子Activity

     转载请注明:http://www.cnblogs.com/igoslly/p/6853730.html  调用子Activity 需要子Activity返回值 MainActivity使用start ...

  8. 【转】 71道经典Android面试题和答案,重要知识点都包含了

    ,,面试题1.        下列哪些语句关于内存回收的说明是正确的? (b ) A. 程序员必须创建一个线程来释放内存  B.内存回收程序负责释放无用内存   C.内存回收程序允许程序员直接释放内存 ...

  9. Android面试总结 (转)

    1. 下列哪些语句关于内存回收的说明是正确的? (b) A. 程序员必须创建一个线程来释放内存 B. 内存回收程序负责释放无用内存 C. 内存回收程序允许程序员直接释放内存 D. 内存回收程序可以在指 ...

随机推荐

  1. AGC015 C Nuske vs Phantom Thnook(前缀和)

    题意 题目链接 给出一张$n \times m$的网格,其中$1$为蓝点,$2$为白点. $Q$次询问,每次询问一个子矩阵内蓝点形成的联通块的数量 保证任意联通块内的任意蓝点之间均只有一条路径可达 S ...

  2. 一个容易被忽视的css选择器

    之前学的的迷糊了,也不知道什么会什么不会了,跑去面试了.别人列出一堆css选择器,本以为选择器没啥的,结果到那个多类选择器翻车了,.a.b选择同时含a,b类名的,很尴尬所以回来仔细整理了一下.目前根据 ...

  3. 使用Loadrunner监控Windows资源

    为了区分把装有loadrunner的机器称作A,被监控资源的服务器(windows)称作B 1.确保B机器Administrator账户是可使用状态:右键计算机→ 管理→ 本地用户和组→ 用户,其中A ...

  4. http请求各种数据的接受

    一.接受请求的http数据 1.接受客户请求的数据,例如xml数据格式,代码如下: 此代码相当于服务端 public String analyzeWeixinXMLStr(HttpServletReq ...

  5. app后台管理系统框架metronic的学习笔记

    先来看效果: 给出当前页面的代码: <!DOCTYPE html> <!--[if IE 8]> <html lang="zh" class=&quo ...

  6. ASP.NET的三种开发模式

    前言 ASP.NET 是一个免费的Web开发框架,是由微软在.NET Framework框架中所提供的,或者说ASP.NET是开发Web应用程序的类库,封装在System.Web.dll 文件中.AS ...

  7. HDU 1009 FatMouse' Trade肥老鼠的交易(AC代码) 贪心法

    题意: 一只老鼠用猫粮来换豆子,每个房间的兑换率不同,所以得尽量从兑换率高的房间先兑换.肥老鼠准备M磅猫粮去跟猫交易,让猫在warehouse中帮他指路,以找到好吃的.warehouse有N个房间,第 ...

  8. Android(java)学习笔记76:Handler用法总结 和 秒表案例

    一.Handler的定义: Handler主要接收子线程发送的数据, 并用此数据配合主线程更新UI,用来跟UI主线程交互用.比如可以用handler发送一个message,然后在handler的线程中 ...

  9. animation写动画

    最近,接到项目需求,需要写大量的动画,那么怎么写呢? 动画是使元素从一种样式逐渐变化为另一种样式的效果.可以用百分比来规定变化发生的时间,或用关键词 "from" 和 " ...

  10. 使用Scanner类获取键盘输入的会员卡号,并将该数据存储在变量中,输出这个变量的信息

    package come.one01;import java.util.Scanner; // 导入Scanner类public class One03 { public static void ma ...