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

本文共 3006 字,大约阅读时间需要 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

 

接下来的代码片段节选自子ActivityonCreate方法,显示了怎样向调用的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关闭时,它的父ActivityonActivityResult事件处理函数被触发。

 

重写这个方法来处理从子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;

}

}

}

转载于:https://www.cnblogs.com/cosiray/archive/2012/03/30/2425738.html

你可能感兴趣的文章
【翻译】Ext JS 6有什么新东西?
查看>>
Linux开机启动顺序小结
查看>>
C++ 多文件编译简述:头文件、链接性、声明与定义
查看>>
怎么解决MathType希腊字母无法显示的问题
查看>>
SPD4514 Database Technologies and Management
查看>>
【二分图匹配/匈牙利算法】飞行员配对方案问题
查看>>
php小程序登录时解密getUserInfo获取openId和unionId等敏感信息
查看>>
如何给多个子系统设计一个简单通用的权限管理方案?(详细讲解及源代码下载)...
查看>>
linux远程复制/linux远程拷贝/远程上传文件夹 举例
查看>>
进度条(progress)
查看>>
关于宏的一点注意
查看>>
新奇:(nodejs兄弟)用HTML + FLASH +JS 也可以写桌面EXE。
查看>>
透明色设置
查看>>
曾经见过的一篇文章 SQL Server DBA三十问
查看>>
斐波拉契数列的计算方法
查看>>
ID3决策树算法原理及C++实现(其中代码转自别人的博客)
查看>>
文件操作
查看>>
Linux 编译安装Nginx
查看>>
linux下python安装pymssql模块
查看>>
Apache语言支持设置
查看>>