Xamarin.Android アクティビティの起動
1 StartActivity別のActivityを起動するにはStartActivity()を使用します。
インテリセンスによると、下記のようなものの列挙されているが、ちょっと、ややこしかったので、本日は2,3には触れ無いことにします。
1 StartActivityForResult
2 StartActivityFromChild 子ActivityからstartActivityもしくはstartActivityForResultを実行する
3 StartActivityIfNeeded 新たなActivityが必要な場合のみActivityを生成する
2 StartActivityのパラメータStartActivityに指定できるパラメータはIntentとTypeがあります。
//Intentを使用する場合 var intent = new Intent(this,typeof (Activity2)); StartActivity(intent); //typeを使用する場合 StartActivity(typeof(Activity2));
JavaのSDKでは、パラメータにIntentを取らないStartActivityが見当たらないので、Typeだけで指定できるのは、Xamarin拡張のようです。内部でIntentを自動的に生成しているって事なのでしょうか・・・もし、Intentを特にいじる必要が無いのであれば、こちらの方が楽でスッキリしていてイイ感じです。
3 起動されたActivityのクローズ起動された側のActivityが、BackキーやFinish()呼び出してクローズされた場合、元のActivityに戻ります。(多重で、StartActivity()した場合も、順番に戻ります)
4 値の受け渡し
StartActivityForResult()を使用すると、呼び出し元のAcrivityに戻った時に、OnActivityResultのイベントが発生します。このイベントを利用することで、戻り値の受け渡しが可能になります。
(StartActivityでは、このイベントは発生しない)
起動された側のActivityでは、クローズ前にSetResult()を使用して値をセットし、呼び出し側では、OnActivityResultイベントのresultCodeで、この値を取得します。
呼び出し元(Activity1.cs)
private const int RequestCode = 100; //リクエストコード void button_Click(object sender, EventArgs e){ //Activity2を起動する StartActivityForResult(typeof(Activity2), RequestCode); } //呼び出し元へ戻った時のイベント protected override void OnActivityResult(int requestCode, Result resultCode, Intent data){ if (RequestCode == requestCode) { //呼び出し元の確認 Toast.MakeText(this,string.Format("resultCode:{0} data:{1}", requestCode, data),ToastLength.Short).Show(); } }
起動された側(Activity2.cs)
private void button_Click(object sender, EventArgs e){ //戻り値をセットする SetResult(Result.Ok, new Intent("TEST")); Finish(); //Activityを終了させる }
(注意)StartActivityForResultに指定するrequestCodeは0以上でないと機能しない(OnActivityResultイベント自体が発生しない)