博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Activity返回值[转]
阅读量:5133 次
发布时间:2019-06-13

本文共 3080 字,大约阅读时间需要 10 分钟。

使用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;
}
}
}

 

//原文地址:http://www.cnblogs.com/top5/archive/2012/04/09/2439598.html

转载于:https://www.cnblogs.com/yiki/archive/2012/04/10/2440188.html

你可能感兴趣的文章
吞吐量(TPS)、QPS、并发数、响应时间(RT)概念
查看>>
MVVM 下 ContextMenu的命令绑定
查看>>
GIS基础软件及操作(五)
查看>>
SQLSERVER使用密码加密备份文件以防止未经授权还原数据库
查看>>
C#不登录电脑启动程序
查看>>
ASP.NET缓存中Cache过期的三种策略
查看>>
6天通吃树结构—— 第一天 二叉查找树
查看>>
理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用
查看>>
Windows 8实例教程系列 - 布局控制
查看>>
章节2:SQL之多表连接
查看>>
silverlight下多线程处理
查看>>
如何使用ITEXTSHARP将HTML代码字符串写进PDF
查看>>
git bash 出现vim的时候怎么退出
查看>>
React Native开发之IDE(Atom+Nuclide)安装,运行,调试
查看>>
[10月4日的脚本] 获取Office365邮箱文件夹的权限
查看>>
PHP压缩文件操作
查看>>
PHP curl扩展实现数据抓取
查看>>
生成随机密钥
查看>>
falsk 请求钩子
查看>>
8-过滤器Filter和监听器Listener
查看>>