[Xamarin] 開啟另外一個Activity 並且帶資料 (转帖)

每隻App是透過許多畫面所組成的,當然可能主畫面之外,都會有許多其他的頁面

再Android 設計中畫面會有配合的Activity 當然在這之前,最好事先了解一下,Android 關於生命週期的規劃

關於Activity 的生命週期可以參考這篇

http://docs.xamarin.com/guides/android/application_fundamentals/activity_lifecycle

 

我們看看今天的範例..


兩個按鈕,第一個按鈕(btn1) 按下後,會呼叫起Child1Activity

這邊不難,直接看程式

 

var btn1 = FindViewById<Button>(Resource.Id.btn1);
btn1.Click += delegate
{
          StartActivity(typeof(Child1Activity));
};

很簡單,如果不需要帶資料給另外一個Activity  直接透過StartActivity 就可以呼叫起來

再來第二個按鈕(btn2) 我們要把Child2Activity給叫起來之外我們必須要把一些資料帶過去

這時候要透過intent (意圖),為什麼會這樣設計呢?!這關係到因為很多時候,在Android 中會有許多Activity會被不只是自己開發的App給叫起

有可能會是系統發給你的,所以都得透過Intent去做處理,其中案例我帶一個key 為 username 值為 donma的資料過去

 

var btn2 = FindViewById<Button>(Resource.Id.btn2);
btn2.Click += delegate
{
 
    var intentAct2 = new Intent(this, typeof(Child2Activity));
    //將intent 放入username的值為donma 帶過去
    intentAct2.PutExtra("username", "donma");
    StartActivity(intentAct2);
 
};

在Activity 這邊,原本android 是要透過getIntent 取得,但是在Xamarin 直接就可以在 this.Intent 中拿到

Child2Activity.cs:

 

using Android.App;
using Android.OS;
using Android.Widget;
 
namespace NewActivity
{
    [Activity(Label = "My Activity")]
    public class Child2Activity : Activity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.Child2);
            var username = Intent.GetStringExtra("username") ?? "無資料";
            var tvChild2View = FindViewById<TextView>(Resource.Id.tvChild2View);
 
            tvChild2View.Text = "傳來的資料:" + username; 
        }
    }
}

結果:


成功拉是不是沒很難 :)

你可能感兴趣的:(Activity)