日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

【Android】12.3 在当前Activity中获取另一个Activity的返回值

發布時間:2024/9/20 Android 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android】12.3 在当前Activity中获取另一个Activity的返回值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

分類: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

<?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"><Buttonandroid:id="@+id/btn1"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="獲取輸入的電話和地址" /><Buttonandroid:id="@+id/btn2"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="獲取撥出的電話號碼" /><TextViewandroid: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"><EditTextandroid: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" /><Buttonandroid:id="@+id/btnOK"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="確定" /><Buttonandroid: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")]public class ch1202Activity1 : Activity{protected override void 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")]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<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);};}protected override void 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;}}} }

運行。

總結

以上是生活随笔為你收集整理的【Android】12.3 在当前Activity中获取另一个Activity的返回值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。