【Android】12.3 在当前Activity中获取另一个Activity的返回值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【Android】12.3 在当前Activity中获取另一个Activity的返回值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5967字,纯文字阅读大概需要9分钟。
内容图文
![【Android】12.3 在当前Activity中获取另一个Activity的返回值](/upload/InfoBanner/zyjiaocheng/1202/b57b3f05c56e42a38537edb9b7e60c64.jpg)
分类: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,需要先在模拟器的通讯录中添加联系人(联系人为空就没法测试返回的结果是否正确了),事先添加的通讯录如下:
![image 技术分享](/upload/getfiles/default/2022/11/12/20221112091015971.jpg)
添加通讯录后,就可以运行示例程序了。
1、示例运行截图
2、主要设计步骤
(1)ch1202_Main.axml
<? xml version="1.0" encoding="utf-8" ?> < LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android" android:orientation ="vertical" android:layout_width ="fill_parent" android:layout_height ="fill_parent" > < Button android:id ="@+id/btn1" android:layout_width ="fill_parent" android:layout_height ="wrap_content" android:text ="获取输入的电话和地址" /> < Button android:id ="@+id/btn2" android:layout_width ="fill_parent" android:layout_height ="wrap_content" android:text ="获取拨出的电话号码" /> < TextView android:text ="返回的结果:" android:textAppearance ="?android:attr/textAppearanceSmall" android:layout_width ="wrap_content" android:layout_height ="wrap_content" android:id ="@+id/textViewResult" android:layout_margin ="30dp" /> </ LinearLayout >
(2)ch1202_Layout1.axml
?xml version="1.0" encoding="utf-8"?> < LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android" android:orientation ="vertical" android:layout_width ="fill_parent" android:layout_height ="fill_parent" > < EditText android:id ="@+id/telNumber" android:layout_width ="fill_parent" android:layout_height ="wrap_content" android:text ="13811112222" android:background ="@android:color/white" android:textColor ="@android:color/black" android:layout_margin ="20dp" android:height ="40dp" /> < Button android:id ="@+id/btnOK" android:layout_width ="fill_parent" android:layout_height ="wrap_content" android:text ="确定" /> < Button android:id ="@+id/btnCancel" android:layout_width ="fill_parent" android:layout_height ="wrap_content" android:text ="取消" /> </ LinearLayout >
(3)ch1202Activity1.cs
using Android.App; using Android.Content; using Android.OS; using Android.Widget; namespace MyDemos.SrcDemos { [Activity(Label = "【例12-2】Intent基本用法2")] publicclass ch1202Activity1 : Activity { protectedoverridevoid OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.ch1202_Layout1); var telNumber = FindViewById<EditText>(Resource.Id.telNumber); Button btnOK = FindViewById<Button>(Resource.Id.btnOK); btnOK.Click += delegate { var data = Android.Net.Uri.Parse("tel:" + telNumber); Intent intent = new Intent(null, data); var result = intent.PutExtra("info", $"电话:{telNumber.Text},地址:城东区XX楼XX号"); SetResult(Result.Ok, result); Finish(); }; Button btnCancel = FindViewById<Button>(Resource.Id.btnCancel); btnCancel.Click += delegate { SetResult(Result.Canceled, null); Finish(); }; } } }
(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")] publicclass ch1202Main : Activity { privateenum RequestCode { Activity1RequestCode, Activity2RequestCode } protectedoverridevoid OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.ch1202_Main); Button btn1 = FindViewById<Button>(Resource.Id.btn1); btn1.Click += delegate { Intent intent = new Intent(this, typeof(ch1202Activity1)); StartActivityForResult(intent, (int)RequestCode.Activity1RequestCode); }; Button btn2 = FindViewById<Button>(Resource.Id.btn2); btn2.Click += delegate { var uri = Android.Net.Uri.Parse("content://contacts/people"); Intent intent = new Intent(Intent.ActionPick, uri); StartActivityForResult(intent, (int)RequestCode.Activity2RequestCode); }; } protectedoverridevoid OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data) { base.OnActivityResult(requestCode, resultCode, data); var result = FindViewById<TextView>(Resource.Id.textViewResult); switch (requestCode) { case (int)RequestCode.Activity1RequestCode: if (resultCode == Result.Ok) { result.Text = "Activity1的返回结果:\n"+ data.GetStringExtra("info"); } else { result.Text = "Activity1的返回结果:null"; } break; case (int)RequestCode.Activity2RequestCode: result.Text = "Activity2的返回结果:\n" + data.DataString; ; break; } } } }
运行。
原文:http://www.cnblogs.com/rainmj/p/5208687.html
内容总结
以上是互联网集市为您收集整理的【Android】12.3 在当前Activity中获取另一个Activity的返回值全部内容,希望文章能够帮你解决【Android】12.3 在当前Activity中获取另一个Activity的返回值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。