博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Android】12.3 在当前Activity中获取另一个Activity的返回值
阅读量:6986 次
发布时间:2019-06-27

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

分类:C#、Android、VS2015;

创建日期:2016-02-23

一、简介

在上一节的示例中,通过StartActivity(Intent)方法启动另一个Activity后,这两个Activity之间在例子中是相互独立的,两个界面并没有什么关联。但是,很多情况下,在当前Activity中启动另一个Activity,都是为了让用户在被启动的这个Activity中去输入或者选择某些特定的信息,然后将结果返回给当前的Activity。

那么,如何返回这些特定的信息呢?这一节就来解决这个问题。

二、基本设计思路

按照Activity启动的先后顺序,可将先启动的Activity称为界面1,后启动的Activity称为界面2。

要将界面2中的信息返回给界面1,可按下面的步骤来设计。

1、在界面1中启动界面2

在界面1中调用StartActivityForResult()方法启动界面2。例如:

int Activity1RequestCode=1;  //唯一标识子Activity的请求码Intent intent=new Intent(this,typeof(Activity1));StartActivityForResult(intent, Activity1RequestCode);int Activity2RequestCode =2;var uri= Android.Net.Uri.Parse("content://contacts/people");Intent intent=new Intent(Intent.ActionPick,uri);StartActivityForResult(intent, Activity2RequestCode);

2、在界面2中设置返回值

在界面2调用Finish方法关闭它自身之前,调用SetResult方法将所需的数据返回给界面1。SetResult方法有两个参数:结果码和返回值。

结果码表示子Activity返回的状态,通常为Activity.ResultOK和Activity.ResultCanceled。也可以是自定义的结果码。所有结果码都是整数类型。

返回值封装在Intent中,界面2通过Intent将返回的数据传递给界面1。数据主要以Uri的形式来表示,另外还可以通过Extra的集合附加一些额外信息。

例如:

var data = Android.Net.Uri.Parse("tel:" + telNumber);Intent intent = new Intent(null, data);var result = intent.PutExtra("address", "XX市XX街12号");SetResult(Result.Ok, result);Finish();

3、在界面1中获取返回值

当界面2关闭时,它会自动回调界面1的OnActivityResult方法,因此,只需要在界面1中重写该方法即可得到返回值。例如:

protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data){    base.OnActivityResult(requestCode, resultCode, data);    ……}

在这段代码中,requestCode表示是哪个Activity返回的值,resultCode表示Activity的返回状态,data表示Activity返回的数据(Intent类型)。返回的数据用途不同,Uri中使用的协议也不同。另外,还可以通过Extra方法返回一些原始类型的数据。

三、示例—IntentDemo2

本示例演示如何在当前Activity中获取另一个Activity的返回值。

例子实现两个功能,第1个按钮演示如何读取另一个界面中输入的信息,为简单起见,例子中仅给出了输入电话号码的文本框,而且还没添加提示信息,地址则直接赋值了;第2个按钮演示如何读取另一个界面通过通讯录拨出的电话号码,为了在程序中启动读取通讯录数据的Intent,需要先在模拟器的通讯录中添加联系人(联系人为空就没法测试返回的结果是否正确了),事先添加的通讯录如下:

添加通讯录后,就可以运行示例程序了。

1、示例运行截图

 

 

2、主要设计步骤

(1)ch1202_Main.axml

(2)ch1202_Layout1.axml

?xml version="1.0" encoding="utf-8"?>

(3)ch1202Activity1.cs

using Android.App;using Android.Content;using Android.OS;using Android.Widget;namespace MyDemos.SrcDemos{    [Activity(Label = "【例12-2】Intent基本用法2")]    public class ch1202Activity1 : Activity    {        protected override void OnCreate(Bundle savedInstanceState)        {            base.OnCreate(savedInstanceState);            SetContentView(Resource.Layout.ch1202_Layout1);            var telNumber = FindViewById
(Resource.Id.telNumber); Button btnOK = FindViewById

(4)ch1202Main.cs

using Android.App;using Android.Content;using Android.OS;using Android.Runtime;using Android.Widget;namespace MyDemos.SrcDemos{    [Activity(Label = "【例12-2】Intent基本用法2")]    public class ch1202Main : Activity    {        private enum RequestCode { Activity1RequestCode, Activity2RequestCode }        protected override void OnCreate(Bundle savedInstanceState)        {            base.OnCreate(savedInstanceState);            SetContentView(Resource.Layout.ch1202_Main);            Button btn1 = FindViewById

运行。

转载地址:http://vxmpl.baihongyu.com/

你可能感兴趣的文章
dubbo协议参考
查看>>
SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
查看>>
读《白帽子讲Web安全》之安全意识篇(一)
查看>>
GLSL三种修饰符区别与用途(uniform,attribute和varying)
查看>>
python django django-debug-toolbar 加载缓慢,不能使用。
查看>>
操作系之进程调度及算法详解
查看>>
PHPexcel实列
查看>>
Butterknife 的简单使用 和 配合 Butterknife的插件 Zelezny
查看>>
Magento利用input type=”file”上传图片
查看>>
Android音频开发(4):如何存储和解析wav文件
查看>>
Handler延迟事件使用
查看>>
【DG】Oracle 19c使用dbca来搭建物理DG
查看>>
StringBuilder 、StringBuffer 、 String
查看>>
android studio下NDK开发
查看>>
C#MysqlHelper
查看>>
SpringMVC Hello World 实例
查看>>
MySQL BETWEEN 用法
查看>>
vim开启自动缩进
查看>>
【转】js之iframe子页面与父页面通信
查看>>
java设计模式_模版模式
查看>>