程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Xamarin android 之Activity詳解,xamarinandroid

Xamarin android 之Activity詳解,xamarinandroid

編輯:C#入門知識

Xamarin android 之Activity詳解,xamarinandroid


序言:

上篇大概的講解了新建一個android的流程。今天為大家帶來的是Activity詳解,因為自己在開發過程中就遇到

好幾次坑,尴尬。

生命周期

和Java裡頭一樣一樣的,如圖

using System; using Android.App; using Android.Content; using Android.Runtime; using Android.Views; using Android.Widget; using Android.OS; using Android.Util; namespace FirstAndroidAPP { [Activity(Label = "FirstAndroidAPP", MainLauncher = true, Icon = "@drawable/icon")] public class MainActivity : Activity { int count = 1; protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); // Set our view from the "main" layout resource SetContentView(Resource.Layout.Main); // Get our button from the layout resource, // and attach an event to it Button button = FindViewById<Button>(Resource.Id.MyButton); button.Click += delegate { button.Text = string.Format("{0} clicks!", count++); }; } protected override void OnStart() { Log.Debug("OnStart", "Activity重新回到前台"); base.OnStart(); } protected override void OnResume() { Log.Debug("OnResume", "OnResume called"); base.OnResume(); } protected override void OnStop() { Log.Debug("OnStop", "OnStop called"); base.OnStop(); } protected override void OnDestroy() { Log.Debug("OnDestory", "系統被銷毀"); base.OnDestroy(); } protected override void OnRestart() { Log.Debug("OnRestart", "系統重新回到前台"); base.OnRestart(); } } }

上述還有一種會觸發Activity的生命周期,屏幕旋轉的時候也會進入。而且會導致當前activity發生OnDestroy-> OnCreate,這樣會重新構造當前activity和界面布局。如果當前Activity有加載數據的話,會導致重復加載。

生命周期還是蠻好理解的,但是如果是Android小白的話,還是自己親自寫下代碼,打上斷點自己調試下,這樣有助於自己方便理解。大概理了下生命周期,接下來了解一下Activity的啟動方式。

Activity四種啟動方式

這裡的話引用下園中博友的文章http://www.cnblogs.com/meizixiong/archive/2013/07/03/3170591.html 我覺得圖解的很清楚。

一、啟動模式介紹

  啟動模式簡單地說就是Activity啟動時的策略,在AndroidManifest.xml中的標簽的android:launchMode屬性設置;在Xamarin中,在每個Activity上加上一個Attribute

[Activity(Label = "SecondActivity")] public class SecondActivity : Activity { protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.Second); // Create your application here } DateTime? lastBackKeyDownTime;//記錄上次按下Back的時間 public override bool OnKeyDown([GeneratedEnum] Keycode keyCode, KeyEvent e) { if (keyCode == Keycode.Back && e.Action == KeyEventActions.Down)//監聽Back鍵 { if (!lastBackKeyDownTime.HasValue || DateTime.Now - lastBackKeyDownTime.Value > new TimeSpan(0, 0, 2)) { Toast.MakeText(this, "再按一次退出程序", ToastLength.Short).Show(); lastBackKeyDownTime = DateTime.Now; } else { Intent intent = new Intent(); intent.SetClass(this, typeof(MainActivity)); StartActivity(intent); } return true; } return base.OnKeyDown(keyCode, e); } }

在MainActivity中點擊Button,跳轉到SecondActivity中

protected override void OnCreate(Bundle bundle)
{
         base.OnCreate(bundle);
         // Set our view from the "main" layout resource
         SetContentView(Resource.Layout.Main);
         // Get our button from the layout resource,
         // and attach an event to it
         Button button = FindViewById<Button>(Resource.Id.MyButton);
          button.Click += delegate
          {
              Intent intent = new Intent(this, typeof(SecondActivity));
              StartActivity(intent);
          };
}

 protected override void OnNewIntent(Intent intent)
{
       Finish();
}

效果如圖:

singleTask 如果在棧中已經有該Activity的實例,就重用該實例(會調用實例的onNewIntent())。重用時, 會讓該實例回到棧頂,因此在它上面的實例將會被移除棧。如果棧中不存在該實例,將會創建新的實例放入棧中。為了驗證會將MainActivity上的實例銷毀,我們在SecondAvtivity中重寫OnDestory函數,打上日志:

 
自此,可以確認是被銷毀了,哈哈哈 

Activity傳值

最後在稍微的描述下Activity傳值吧,在MainActivity中打開SecondActivity時加上如下代碼

Intent intent = new Intent(this, typeof(SecondActivity));
intent.PutExtra("name","hushuai");
StartActivity(intent);

然後在SecondActivity的OnCreate函數中去接收它:

base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.Second);
string name = Intent.GetStringExtra ("name");
Toast.MakeText (this, "我是誰?我當然是" + name + "了啊!", ToastLength.Short).Show ();

Finally,你會看到如下效果圖:

最後

就寫到這兒吧,畢竟在公司還是要上班。每晚上寫點兒,今天早上來公司補充了最後的一點兒。寫的都小心翼翼,怕被領導看見了。 尴尬

文章寫的有點兒慢,白天工作也忙,晚上自己又要搞點兒外快,不容易啊。

再貼點兒我現在做的東西的界面圖吧,畢竟自己又不是美工,又是我一個人做,所以有點兒丑。

image

image

到時候再和大家分享一些遇到的問題,寫博速度有點兒慢,然後就是文章排版頭痛。

望大家支持,3Q。

 

吐槽一點兒,為什麼博客園分類沒有Xamarin 系列?

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved