欢迎大家光临我的小店:http://clkk.taobao.com

大致步骤:
1.启动另外一个Activity,这里称子Activity;

2.子Activity通过setResult方法设置返回结果,setResult方法带两个参数:结果码和表示为Intent的负载值;

3.父Activity通过onActivityResult方法处理子Activity返回的结果

让子Activity有返回值

   

使用startActivity方式启动的Activity和它的父Activity无关,当它关闭时也不会给父Activity提供任何反馈。

你可以启动一个Activity作为子Activity,它与父Activity有内在的联系。当子Activity关闭时,它会触发父
Activity中的一个事件处理函数。子Activity最适合用在一个Activity为其它的Activity提供数据(例如用户从一个列表中选择
一个项目)的场合。

子Activity的创建和普通Activity的创建相同,也必须在应用程序的manifest中注册。任何在manifest中注册的Activity都可以用作子Activity。

启动子Activity

startActivityForResult方法和startActivity方法工作很相似,但有一个很重要的差异。Intent都是用来决定启动哪个Activity,你还可以传入一个请求码。这个值将在后面用来作为有返回值Activity的唯一ID。

下面的代码显示了如何启动一个子Activity:

  1. private static final int SHOW_SUBACTIVITY = 1;
  2. Intent intent = new Intent(this, MyOtherActivity.class);
  3. startActivityForResult(intent, SHOW_SUBACTIVITY);

和正常的Activity一样,子Activity可以隐式或显式启动。下面的框架代码使用一个隐式的Intent来启动一个新的子Activity来挑选一个联系人:

  1. private static final int PICK_CONTACT_SUBACTIVITY = 2;
  2. Uri uri = Uri.parse(“content://contacts/people”);
  3. Intent intent = new Intent(Intent.ACTION_PICK, uri);
  4. startActivityForResult(intent, PICK_CONTACT_SUBACTIVITY);

返回值

当子Activity准备关闭时,在finish之前调用setResult来给调用的Activity返回一个结果。

setResult方法带两个参数:结果码和表示为Intent的负载值。结果码是运行子Activity的结果,一般是
Activity.RESULT_OK或Activity.RESULT_CANCELED。在一些情况下,你会希望使用自己的响应代号来处理特定的应用
程序的选择;setResult支持任何整数值。

作为结果返回的Intent可以包含指向一个内容(例如联系人,电话号码或媒体文件)的URI和一组用来返回额外信息的Extra。

接下来的代码片段节选自子Activity的onCreate方法,显示了怎样向调用的Activity返回不同的结果:

  1. Button okButton = (Button) findViewById(R.id.ok_button);
  2. okButton.setOnClickListener(new View.OnClickListener() {
  3. public void onClick(View view)
  4. {
  5. Uri data = Uri.parse(“content://horses/” + selected_horse_id);
  6. Intent result = new Intent(null, data);
  7. result.putExtra(IS_INPUT_CORRECT, inputCorrect);
  8. result.putExtra(SELECTED_PISTOL, selectedPistol);
  9. setResult(RESULT_OK, result);
  10. finish();
  11. }
  12. });
  13. Button cancelButton = (Button) findViewById(R.id.cancel_button);
  14. cancelButton.setOnClickListener(new View.OnClickListener() {
  15. public void onClick(View view)
  16. {
  17. setResult(RESULT_CANCELED, null);
  18. finish();
  19. }
  20. });

处理子Activity的结果

当子Activity关闭时,它的父Activity的onActivityResult事件处理函数被触发。

重写这个方法来处理从子Activity返回的结果。onActivityResult处理器接受好几个参数:

❑ 请求码

曾经用来启动子Activity的请求码。

❑ 结果码

结果码是由子Activity设置的,用来显示它的结果。它可以是任何整数值,但典型的值是Activity.RESULT_OK和Activity.RESULT_CANCELLED。

如果子Activity非正常关闭或在关闭时没有指定结果码,结果码都是Activity.RESULT_CANCELED。

❑ 数据

一个Intent来打包任何返回的数据。依赖于子Activity的目的,它可能会包含一个代表特殊的从列表中选择的数据的URI。可变通的,或额外的,子Activity可以使用“extras”机制以基础值的方式返回临时信息。

下面的框架代码实现了一个Activity中的onActivityResult事件处理函数:

    1. private static final int SHOW_SUB_ACTIVITY_ONE = 1;
    2. private static final int SHOW_SUB_ACTIVITY_TWO = 2;
    3. @Override
    4. public void onActivityResult(int requestCode, int resultCode, Intent data) {
    5. super.onActivityResult(requestCode, resultCode, data);
    6. switch(requestCode)
    7. {
    8. case (SHOW_SUB_ACTIVITY_ONE) :
    9. {
    10. if (resultCode == Activity.RESULT_OK)
    11. {
    12. Uri horse = data.getData();
    13. boolean inputCorrect = data.getBooleanExtra(IS_INPUT_CORRECT, false);
    14. String selectedPistol = data.getStringExtra(SELECTED_PISTOL);
    15. }
    16. break;
    17. }
    18. case (SHOW_SUB_ACTIVITY_TWO) :
    19. {
    20. if (resultCode == Activity.RESULT_OK)
    21. {
    22. // TODO: Handle OK click.
    23. }
    24. break;
    25. }
    26. }
    27. }
    28. 转载自:http://tianrui-wang-163-com.iteye.com/blog/970464

启动另外一个activity,并返回结果的更多相关文章

  1. 【Android Developers Training】 4. 启动另一个Activity

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  2. 【Android】12.3 在当前Activity中获取另一个Activity的返回值

    分类:C#.Android.VS2015: 创建日期:2016-02-23 一.简介 在上一节的示例中,通过StartActivity(Intent)方法启动另一个Activity后,这两个Activ ...

  3. 4) 十分钟学会android--建立第一个APP,启动另一个Activity

    在完成上一课(建立简单的用户界面)后,我们已经拥有了显示一个activity(一个界面)的app(应用),该activity包含了一个文本字段和一个按钮.在这节课中,我们将添加一些新的代码到MyAct ...

  4. Android中调用另一个Activity并返回结果-以模拟选择头像功能为例

    场景 Android中点击按钮启动另一个Activity以及Activity之间传值: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/detail ...

  5. Android中点击按钮启动另一个Activity以及Activity之间传值

    场景 点击第一个Activity中的按钮,启动第二个Activity,关闭第二个Activity,返回到第一个Activity. 在第一个Activity中给第二个Activity传递值,第二个Act ...

  6. 如何启动另一个Activity

    --------siwuxie95 首先为res->layout下my_layout.xml 的Design添加一个Button,进入Text, android:text 修改为:启动另一个Ac ...

  7. 【安卓面试题】在一个Activity启动另一个Activity和在Service中启动一个Activity有什么区别

    在Activity中可以直接使用Intent启动另一个Activity 显式Intent intent = new Intent(context, activity.class) 隐式 Intent ...

  8. Android应用开发学习之启动另外一个Activity

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 一个Activity可以启动另外一个Activity,以实现比较复杂的功能,我们来看一个例子,其运行效果如下图所示: ...

  9. 安卓-启动下一个Activity

    Intent intent = new Intent(NotebookActivity.this, MessageActivity.class); startActivity(intent); 通过意 ...

随机推荐

  1. MVC3+Linq to sql 显示数据库中数据表的数据

    1:首先创建asp.net mvc3应用程序 2:创建项目完成后 找到controllers文件鼠标右击选择添加控制器 3 为models文件夹添加一个linq to sql类文件,然后把数据库中的数 ...

  2. Java中ThreadLocal的设计与使用

    早在Java 1.2推出之时,Java平台中就引入了一个新的支持:java.lang.ThreadLocal,给我们在编写多线程程序时提供了一种新的选择.使用这个工具类可以很简洁地编写出优美的多线程程 ...

  3. js技巧总结

    很早以前看到的代码,同时加上一些我在项目中用到的代码,感觉很实用,在这里记录下来,怕忘记了,有些代码忘记在哪看到的了,所以就不贴网址了,感谢各位大神的分享!如果有其他的好的方法,欢迎留言~ 1.取整的 ...

  4. [转]poll技术

    poll()函数:这个函数是某些Unix系统提供的用于执行与select()函数同等功能的函数,下面是这个函数的声明: #include <poll.h> int poll(struct ...

  5. Swift - 使用NSNotificationCenter发送通知,接收通知

    转载自:http://www.mamicode.com/info-detail-1069228.html 标签: 1,通知(NSNotification)介绍 这里所说的通知不是指发给用户看的通知消息 ...

  6. uva 10054 The Necklace 拼项链 欧拉回路基础应用

    昨天做了道水题,今天这题是比较水的应用. 给出n个项链的珠子,珠子的两端有两种颜色,项链上相邻的珠子要颜色匹配,判断能不能拼凑成一天项链. 是挺水的,但是一开始我把整个项链看成一个点,然后用dfs去找 ...

  7. css边框阴影问题

    阴影落在下方:box-shadow: 0 3px 5px rgba(0, 0, 0, .2); 阴影落在四周:box-shadow: 0 3px 5px rgba(0, 0, 0, .2), 0 0 ...

  8. 剑指Offer01 杨氏数组寻值

    /************************************************************************* > File Name: 001.c > ...

  9. Mac和Linux下测试端口是否存活一法[转载]

    测试端口存活的最常用的方法是telnet $telnet 127.0.0.1 80 不过这个方法有一个不方便的地方:连接成功后会进入交互模式,需要按 ctrl + ] 和 q 才能退出. 后来,经过网 ...

  10. 转: 58同城高性能移动Push推送平台架构演进之路

    转: http://geek.csdn.net/news/detail/58738 文/孙玄 本文详细讲述58同城高性能移动Push推送平台架构演进的三个阶段,并介绍了什么是移动Push推送,为什么需 ...