启动另外一个activity,并返回结果
欢迎大家光临我的小店: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:
- private static final int SHOW_SUBACTIVITY = 1;
- Intent intent = new Intent(this, MyOtherActivity.class);
- startActivityForResult(intent, SHOW_SUBACTIVITY);
和正常的Activity一样,子Activity可以隐式或显式启动。下面的框架代码使用一个隐式的Intent来启动一个新的子Activity来挑选一个联系人:
- private static final int PICK_CONTACT_SUBACTIVITY = 2;
- Uri uri = Uri.parse(“content://contacts/people”);
- Intent intent = new Intent(Intent.ACTION_PICK, uri);
- 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返回不同的结果:
- Button okButton = (Button) findViewById(R.id.ok_button);
- okButton.setOnClickListener(new View.OnClickListener() {
- public void onClick(View view)
- {
- Uri data = Uri.parse(“content://horses/” + selected_horse_id);
- Intent result = new Intent(null, data);
- result.putExtra(IS_INPUT_CORRECT, inputCorrect);
- result.putExtra(SELECTED_PISTOL, selectedPistol);
- setResult(RESULT_OK, result);
- finish();
- }
- });
- Button cancelButton = (Button) findViewById(R.id.cancel_button);
- cancelButton.setOnClickListener(new View.OnClickListener() {
- public void onClick(View view)
- {
- setResult(RESULT_CANCELED, null);
- finish();
- }
- });
处理子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事件处理函数:
- private static final int SHOW_SUB_ACTIVITY_ONE = 1;
- private static final int SHOW_SUB_ACTIVITY_TWO = 2;
- @Override
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- switch(requestCode)
- {
- case (SHOW_SUB_ACTIVITY_ONE) :
- {
- if (resultCode == Activity.RESULT_OK)
- {
- Uri horse = data.getData();
- boolean inputCorrect = data.getBooleanExtra(IS_INPUT_CORRECT, false);
- String selectedPistol = data.getStringExtra(SELECTED_PISTOL);
- }
- break;
- }
- case (SHOW_SUB_ACTIVITY_TWO) :
- {
- if (resultCode == Activity.RESULT_OK)
- {
- // TODO: Handle OK click.
- }
- break;
- }
- }
- }
- 转载自:http://tianrui-wang-163-com.iteye.com/blog/970464
启动另外一个activity,并返回结果的更多相关文章
- 【Android Developers Training】 4. 启动另一个Activity
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android】12.3 在当前Activity中获取另一个Activity的返回值
分类:C#.Android.VS2015: 创建日期:2016-02-23 一.简介 在上一节的示例中,通过StartActivity(Intent)方法启动另一个Activity后,这两个Activ ...
- 4) 十分钟学会android--建立第一个APP,启动另一个Activity
在完成上一课(建立简单的用户界面)后,我们已经拥有了显示一个activity(一个界面)的app(应用),该activity包含了一个文本字段和一个按钮.在这节课中,我们将添加一些新的代码到MyAct ...
- Android中调用另一个Activity并返回结果-以模拟选择头像功能为例
场景 Android中点击按钮启动另一个Activity以及Activity之间传值: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/detail ...
- Android中点击按钮启动另一个Activity以及Activity之间传值
场景 点击第一个Activity中的按钮,启动第二个Activity,关闭第二个Activity,返回到第一个Activity. 在第一个Activity中给第二个Activity传递值,第二个Act ...
- 如何启动另一个Activity
--------siwuxie95 首先为res->layout下my_layout.xml 的Design添加一个Button,进入Text, android:text 修改为:启动另一个Ac ...
- 【安卓面试题】在一个Activity启动另一个Activity和在Service中启动一个Activity有什么区别
在Activity中可以直接使用Intent启动另一个Activity 显式Intent intent = new Intent(context, activity.class) 隐式 Intent ...
- Android应用开发学习之启动另外一个Activity
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 一个Activity可以启动另外一个Activity,以实现比较复杂的功能,我们来看一个例子,其运行效果如下图所示: ...
- 安卓-启动下一个Activity
Intent intent = new Intent(NotebookActivity.this, MessageActivity.class); startActivity(intent); 通过意 ...
随机推荐
- Oracle基础 (十一)字符串函数
一.字符串函数 LENGTH(char1,char2) SELECT LENGTH('abc def gh') FROM dual; --获取字符串的长度,包含空格 结果: CONCAT(char1, ...
- SqlServer之代码块相关
原创文章,转载必需注明出处:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/sqlserver-codeblock/ 一.go语句 ...
- 百篇大计敬本年之系统篇《六》—— Ubuntu 16.04开启 root 超级用户
Ubuntu 16.04系统在一开始安装完成时是无法切换到 root 用户的,普通用户需要使用 root 权限的时候通常需要在执行命令前加 "sudo",需要经常使用root权限的 ...
- codeforces 680B B. Bear and Finding Criminals(水题)
题目链接: B. Bear and Finding Criminals //#include <bits/stdc++.h> #include <vector> #includ ...
- Nginx服务器不支持PATH_INFO的问题及解决办法
最近在写一个小程序,然后里面自己写了个URL的处理器,比如说访问index.php/article 那么就会自动加载进来article页面,访问index.php/home就会自动加载home页面. ...
- backbone.Collection源码笔记
Backbone.Collection backbone的Collection(集合),用来存储多个model,并且可以多这些model进行数组一样的操作,比如添加,修改,删除,排序,插入,根据索引取 ...
- Layabox:全球唯一Flash直接开发H5的工具Laya.Flash终于开放(转)
HTML5是风口,但年轻幼稚,Flash昔日黄花,但丰满妖娆,Layabox使用Flash直接开发HTML5(或编译页游),渴望性感而青春,但久在深闺,只见于一些大企业和朋友圈中,被指“饥饿营销”,保 ...
- SQL备份(全)
====================================================================== SQL备份 ======================= ...
- js实现移动端无限加载分页
原理:当滚动条到达底部时,执行下一页内容. 判断条件需要理解三个概念: 1.scrollHeight 真实内容的高度 2.clientHeight 视窗的高度,即在浏览器中所能看到的内容的 ...
- JAVA作业-1
编写一个程序,用户输入两个数,求出其加减乘除,并用消息框显示计算结果. import javax.swing.JOptionPane; // import class JOptionPane publ ...