Android 子activity关闭 向父activity传值
使用startActivity方式启动的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;
}
}
}
Android 子activity关闭 向父activity传值的更多相关文章
- vue子组件如何向父组件传值
子组件: <template> <div class="app"> <input @click="sendMsg" type=&q ...
- window.open 子窗口关闭刷新父页面
function JsMod(htmlurl,tmpWidth,tmpHeight){ htmlurl=getRandomUrl(htmlurl); var winObj = window.open( ...
- Android退出时关闭所有Activity的方法
Android退出时,有的Activity可能没有被关闭.为了在Android退出时关闭所有的Activity,设计了以下的类: //关闭Activity的类 public class CloseAc ...
- 【Android开发笔记】返回上层Activity的正确打开方式
技术支持 http://stackoverflow.com/questions/12276027/how-can-i-return-to-a-parent-activity-correctly 首先, ...
- vue 父组件给子组件传值,子组件给父组件传值
父组件如何给子组件传值 使用props 举个例子: 子组件:fromTest.vue,父组件 app.vue fromTest.vue <template> <h2>{{tit ...
- 在设置了android:parentActivityName后,点击子Activity返回键,父Activity总会调用OnDestroy()的解决方式
近期查了非常久这个事情.分享给大家, 原理非常easy,一个Activity在manifet里声明了android:parentActivityName:这时候通过Activity左上角的返回butt ...
- 【android】侧滑关闭activity
最近在使用IOS系统的时候,发现侧滑关闭很实用,因为单手就可以操作,不需要点击左上角的回退按钮.或者返回键了. 所以打算在android上实现这个技术. 需求: 1:IOS只能在屏幕边缘开始,往中间进 ...
- Android课程---Activity的跳转与传值(转自网上)
Activity跳转与传值,主要是通过Intent类来连接多个Activity,以及传递数据. Intent是Android一个很重要的类.Intent直译是“意图”,什么是意图呢?比如你想从这个 ...
- Android Activity的四种经典传值方法
文/ http://blog.csdn.net/sk719887916/article/details/41723613 skay 开发中遇到多个activity的传值问题 相邻两个之间的传值 或者 ...
随机推荐
- XMPP Server
XMPPFramework,编译失败,@import libxmlSimu后提示:Module 'libxmlSimu' not found XMPP协议实现原理介绍 XMPP协议学习笔记 四.地址格 ...
- oracle 主键自增
将表t_uaer的字段ID设置为自增:(用序列sequence的方法来实现) ----创建表 Create table t_user( Id number(6), userid varchar2(20 ...
- JAVA语言基础——类型转换
1.自动类型转换 自动类型转换又称作隐式转换,可以将一个int变量转换为float类型. public class Conver { public static void main(String[] ...
- 【转载】linux内核笔记之高端内存映射
原文:linux内核笔记之高端内存映射 在32位的系统上,内核使用第3GB~第4GB的线性地址空间,共1GB大小.内核将其中的前896MB与物理内存的0~896MB进行直接映射,即线性映射,将剩余的1 ...
- ARM家族大检阅
首先列举下几个名称: 6410 2440 210 A8 ARM9 ARM11 ARMv7 ARMv6 进行分类: 1.芯片名称: 2440 6410 210 2.ARM核: A8 ARM9 ARM11 ...
- javascript权威指南笔记--javascript语言核心(二)
1.函数作用域:在函数内声明的所有变量在函数体内始终是可见的.这意味着在变量声明之前甚至已经可用. *“声明提前”:javascript函数里声明的所有变量(但不涉及赋值)都被提前至函数的顶部. fu ...
- A Star算法笔记
回顾A*算法,偶得一源代码,略有瑕疵,改正之,并置于下. using System; using System.Collections.Generic; using System.Linq; usin ...
- unity3d vs2012
Unity3D自带的MonoDevelop编辑器无论是js还是c#代码提示都很差,很诡异的就是变量名和方法名有的时候提示有的时候不提示.不过用Visual Studio代替MonoDevelop这个问 ...
- oracle的正则表达式
阅读目录 1.oracle(regular expression)简单介绍 2.oracle正则特殊字符 3.oracle正则字符簇 4.各种操作符的运算优先级 5.模拟测试例子 6.oracle对应 ...
- C++——代码重用
一.包含对象成员的类 接口和实现:使用公有继承时,类可以继承接口,可能还有实现(基类的纯虚函数提供接口,但不提供实现).获得接口是is-a关系的组成部分.而使用组合,类可以获得实现,但不能获得接口.不 ...