zoukankan      html  css  js  c++  java
  • [Xamarin] 透過StartActivityForResult傳值回來(转贴)

    上一篇文章(開啟另外一個Activity 並且帶資料),提到了開啟一個新的Activity ,我們將值透過intent 帶到下個Activity

    但是,如果我們開啟的Actrivity其實是有一個任務的,他必須要回傳值回來,讓父親可以知道一些訊息可以帶回來,我們該如何做

    這次案例首先主畫面為.

    2013-07-11_171045

    點下按鈕後,就會開啟 LayoutAskQuestion.axml 

    2013-07-11_171040
    然後就會回到主要的畫面,並且Toast剛剛選擇的結果.

    內容我就寫在code  註解裡..

    主畫面 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/btnAskQuestion"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="詢問問題" />
    </LinearLayout>

    2013-07-11_171045

    Activity1.cs:

     

    using Android.App;
    using Android.Content;
    using Android.Widget;
    using Android.OS;
     
    namespace TestStartActivityForResult
    {
        [Activity(Label = "TestStartActivityForResult", MainLauncher = true, Icon = "@drawable/icon")]
        public class Activity1 : Activity
        {
     
            protected override void OnCreate(Bundle bundle)
            {
                base.OnCreate(bundle);
     
                SetContentView(Resource.Layout.Main);
     
                
                var btnAskQuestion = FindViewById<Button>(Resource.Id.btnAskQuestion);
                //詢問的按鈕按下後
                btnAskQuestion.Click += delegate
                {
                    //因為期許他將回傳值,所以使用StartActivityForResult 叫起
                    //第二參數為 requestcode 這邊主要是設定讓 OnActivityResult 可以判斷當初發出的動機
                    StartActivityForResult(typeof(ActivityAskQuestion), 1);
                };
            }
     
            /// <summary>
            /// 當有 AcrivityForReult Activity 被呼叫且結束後
            /// </summary>
            /// <param name="requestCode"></param>
            /// <param name="resultCode"></param>
            /// <param name="data"></param>
            protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
            {
                base.OnActivityResult(requestCode, resultCode, data);
     
                //如果當初的發的requestCode =1
                if (requestCode == 1 && resultCode == Result.Ok)
                {
                    Toast.MakeText(this, "選取結果(OnActivityResult):" + data.GetStringExtra("hero"), ToastLength.Short).Show();
                }
            }
        }
    }
     

    被呼叫端 LayoutAskQuestion.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/btnBlackWidow"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="黑寡婦" />
        <Button
            android:id="@+id/btnIronMan"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="鋼鐵人" />
    </LinearLayout>

    2013-07-11_171040
    ActivityAskQuestion.cs:

     

    using Android.App;
    using Android.Content;
    using Android.OS;
    using Android.Widget;
     
    namespace TestStartActivityForResult
    {
        [Activity(Label = "Son Activity")]
        public class ActivityAskQuestion : Activity
        {
            protected override void OnCreate(Bundle bundle)
            {
                base.OnCreate(bundle);
                SetContentView(Resource.Layout.LayoutAskQuestion);
     
                var btnBlackWidow = FindViewById<Button>(Resource.Id.btnBlackWidow);
                btnBlackWidow.Click += delegate
                {
                    //開啟一個新的intent
                    var intent = new Intent(this, typeof(Activity1));
                    //放入一個key 為hero 值為 黑寡婦
                    intent.PutExtra("hero", "黑寡婦");
                    //狀態設為OK
                    SetResult(Result.Ok, intent);
                    //呼叫後將關閉此視窗
                    Finish();
                };
     
                var btnIronMan = FindViewById<Button>(Resource.Id.btnIronMan);
                btnIronMan.Click += delegate
                {
                    var intent = new Intent(this, typeof(Activity1));
                    intent.PutExtra("hero", "鋼鐵人");
                    SetResult(Result.Ok, intent);
                    Finish();
                };
     
            }
        }
    }

    呼叫結果..

    Screenshot_2013-07-11-17-29-06

  • 相关阅读:
    pandas 读取excle ,迭代
    prettytable模块(格式化打印内容)
    Python开发丨这些面试题会不会难倒你
    python开发最受欢迎的十款工具
    语言组成
    运算符优先级
    Python 位运算符 逻辑运算符 成员运算符
    **算术运算符
    **Python数据类型转换
    字符串-数字-列表(转换)
  • 原文地址:https://www.cnblogs.com/whatthehell/p/3444562.html
Copyright © 2011-2022 走看看