咱們在開發應用程序時,不可能只使用一個Layout或者一個Activity,好比你個管理系統,要求用戶先登錄而後再使用,這時你至少要有兩個activity吧,先登錄一個,而後成功後須要跳到別一個Activity,這就遇到了多個Activity之間傳遞數據的問題,這也是今天咱們要說的!html
首先一個Activity都會去繼承Activity類,這個類裏有方法已經替咱們實現,咱們能夠把activity看作是MVC裏的Action,即它負責渲染咱們的頁面,組件頁面上所須要的數據等,咱們先來看看一個Activity在渲染頁面時要經歷的幾個事件(方法),這些方法咱們均可以在自定義的activity中去重寫它!數組
onCreate:在這裏建立界面,作一些數據的初始化工做;ide
onStart: 到這一步變成「用戶可見不可交互」的狀態;post
onResume:變成和用戶可交互的,(在Activity棧系統經過棧的方式管理這些Activity,即當前Activity在棧的最上端,運行完彈出棧,則回到上一個Activity);動畫
onPause:到這一步是可見但不可交互的,系統會中止動畫等消耗CPU的事情。從上文的描述已經知道,應該在這裏保存你的一些數據,由於這個時候你的程序的優先級降 低,有可能被系統收回。在這裏保存的數據,應該在onResume裏讀出來。this
onStop:變得不可見 ,被下一個activity覆蓋了url
onDestroy:這是Activity被kill前最後一個被調用方法了,多是其餘類調用finish方法或者是系統爲了節省空間將它暫時性的幹掉,能夠用isFinishing()來判斷它,若是你有 一個Progress Dialog在線程中運行,請在onDestroy裏把他cancel掉,否則等線程結束的時候,調用Dialog的cancel方法會拋異常。spa
onPause,onstop, onDestroy,三種狀態下 activity都有可能被系統kill 掉。線程
/// <summary> /// 點選item 後的事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void listView_ItemClick(object sender, AdapterView.ItemClickEventArgs e) { Toast.MakeText(this, "你選擇了 " + datas[e.Position].Title, ToastLength.Short).Show(); Intent intent = new Intent(this, typeof(UserInfoLayoutActivity)); /* 經過Bundle對象存儲須要傳遞的數據 */ Bundle bundle = new Bundle(); /*字符、字符串、布爾、字節數組、浮點數等等,均可以傳*/ intent.PutExtra("Title", datas[e.Position].Title); intent.PutExtra("Desc", datas[e.Position].Desc); intent.PutExtra("AssistsCount", datas[e.Position].AssistsCount); intent.PutExtra("Fails", datas[e.Position].Fails); intent.PutExtra("Score", datas[e.Position].Score); intent.PutExtra("Level", datas[e.Position].Level); intent.PutExtra("Image", datas[e.Position].Image); /*把bundle對象assign給Intent*/ intent.PutExtras(bundle); StartActivity(intent); }
上面代碼是在某個項目被單擊後所觸發的事件,而在事件創建了Intent對象,它是跨Activty傳值的基礎,以後PutExtra爲它們賦值,它至關於一個hash表,OK,下面咱們再來看看第二頁如何去接受這些數據code
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.UserInfoLayout);//指定要去渲染的視圖 var listView = FindViewById<ListView>(Resource.Id.userInfoViewMain); listView.Adapter = new UserAdapter(this, new UserInfo { Title = Intent.GetStringExtra("Title"), Desc = Intent.GetStringExtra("Desc"), AssistsCount = Intent.GetIntExtra("AssistsCount", 0), Level = Intent.GetIntExtra("Level", 0), Fails = Intent.GetIntExtra("Fails", 0), Image = Intent.GetIntExtra("Image", 0), Score = Intent.GetIntExtra("Score", 0), }); }
代碼中的OnCreate是每一個Activity所具備的方法,即它是進入Activity後,第一個要執行的方法,這裏通常是創建視圖,初始化數據,加載PartialView,最後,咱們看一下大叔的程序執行的最終效果。
第二個頁面
呵呵,怎麼樣,挺有意思吧!