Your SlideShare is downloading. ×
すまべんLite@関西#3
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

すまべんLite@関西#3

419
views

Published on

Published in: Technology

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
419
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. すまべんLite@関⻄西 #03 Xamarin 2.0 で Android 開発⼊入⾨門シリーズ #3 伊勢  シン 2013/09/03(Tue) @Fenrir Inc. ⼤大阪本社
  • 2. シリーズの⽬目標 •  Android アプリ開発の、現代の勘所を押さえる – 画⾯面作成:Fragment、レイアウトXML – リソースの⼊入れ⽅方 – リークの原因になりやすいコンテキストの取り扱い – その他もろもろ •  Xamarin 2.0を使ってC#を⽣生かした開発 – Java苦⼿手なあなたも⼤大丈夫 •  最終回では他PFとのソースコード共有を⽬目指す
  • 3. 想定の対象者 •  これまで他のプラットフォームでそれなりに開発してて、 Androidアプリの開発をやってみたい⼈人 •  Javaに苦⼿手意識識があってAndroid開発に踏み出せ なかった⼈人 •  本当のはじめての⼈人は、周りに聞きながら。 •  僕も Android はちゃんと理理解できているわけじゃない ので、勉強しながらです。 –  ぼく本来は  iOS アプリエンジニアですし。 •  みんなでわかるまで話し合いながらじっくりやる、 「Lite」なシリーズを⽬目指しましょう。
  • 4. ターゲットプラットフォーム •  Xamarin 2.0 – Xamarin Studio – Android SDK •  Android 4.0 – 最新の環境でやってみるというのが今回の⽬目的の⼀一 つなので。 – ⾼高速エミュレーター  (HAXM) は⼊入れておきたい。 •  さもなくば実機 •  これまでのAndoridエミュレータは遅すぎる
  • 5. スケジュール •  全56回でじっくりまったりを予定 – #1 Activity/Fragmentのライフサイクル – #2 画⾯面レイアウトとリソース管理理 – #3 画⾯面遷移・インテント – #4  通信処理理・Twitter タイムラインビューワの開発 – #5  もっと Android らしいアプリに(Service/Alarm) – #6 MvvmCross  を使ったコードの共有化 •  ざっくりこんな感じでしか考えてないので、 進み⽅方次第で前後する可能性があります。
  • 6. Xamarin 2.0でAndroid開発⼊入⾨門 #3 画⾯面遷移とインテント
  • 7. アクティビティとインテント •  アクティビティ – 画⾯面の制御をするオブジェクト •  インテント – アクティビティを起動するためのパラメータ Intent Activity Fragment View
  • 8. インテントを使った画⾯面遷移 •  インテントを使った画⾯面遷移は2種類ある – 明⽰示的インテント •  ⾃自分のアプリ内でほかの画⾯面を呼び出す •  ある決まった特定のアプリの、特定の画⾯面を呼び出す –  相⼿手先のアプリのパッケージ名とアクティビティのクラス名がわかって いれば、それも開ける。 –  アクティビティの外部起動許可/不不許可の設定もあり、 通常はメインの画⾯面以外は不不許可になっている。 – 暗黙的インテント •  特定の操作やデータを処理理できるアプリを呼び出す。 •  インテントに操作の種類「アクション」を指定できる。
  • 9. 実はこれもインテント •  アプリの起動 – ランチャーアプリが、 アプリに対して「メイン」というメッセージを送っている •  写真を撮った後の「共有」 – 暗黙的インテントで「送信」を送っている
  • 10. インテントを使ってみよう •  プロジェクトをダウンロードしてください。 •  2つのアクティビティとフラグメント、 メインには4つのボタンが定義済みです。
  • 11. 明⽰示的インテントで画⾯面遷移 •  アプリ内での明⽰示的インテントの遷移 – Context (Activity) と、クラスの型を渡します。 – ActivityのStartActivityメソッドを呼ぶと実⾏行行されます。 button01.Click += (sender, e) => {"     var intent = new Intent(this.Activity, " typeof(SubActivity));"     this.Activity.StartActivity(intent);" };"
  • 12. 暗黙的インテントでメール送信 •  暗黙的インテントは、アクション名を指定して初期化しま す。 –  表⽰示・送信などが割り当てられています。 –  インテントの名前は⽂文字列列で指定しますが、 標準のものは定数があります。 •  インテントには  Extras という領領域で引数を渡せます。 button02.Click += (sender, e) => {"     var intent = new Intent(Intent.ActionSend);"     intent.SetType("text/plain");"     intent.PutExtra(Intent.ExtraText, "Hello!");"     this.Activity.StartActivity(intent);" };
  • 13. 暗黙的インテントでブラウザ起動 •  もう⼀一つの例例としてブラウザ起動。 – URLを渡して起動します。 button03.Click += (sender, e) => {"     var intent = new Intent(Intent.ActionView, " Android.Net.Uri.Parse("http://www.google.com/"));"     this.Activity.StartActivity(intent);" };
  • 14. 戻り値をとる •  startActivityForResult を使うと、 呼び出し先のアクティビティから結果を取得できます。 –  ファイルを開くダイアログみたいな感じになる。 •  呼び出し元は  startActivityForResult にするだけ。 –  同じ画⾯面で複数のStartActivityForResultをしたときにどれか わかるように識識別するための番号を指定。 任意のものを指定してOK。 button04.Click += (sender, e) => {"     var intent = new Intent(this.Activity, " typeof(SubActivity));"     this.StartActivityForResult(intent, 1);" };
  • 15. 戻り値を返す •  ActivityのSetResultで戻り値をセットできます。 •  Finishを実⾏行行すると、そのActivityを閉じることができます。 var buttonYes = rootView.FindViewById (Resource.Id.button_yes);" buttonYes.Click += (sender, e) => {"     var intent = new Intent();"     intent.PutExtra("returnText", " Activity.GetString(Resource.String.return_message_yes));"     this.Activity.SetResult(Result.Ok, intent);"     this.Activity.Finish();" };" " var buttonNo = rootView.FindViewById (Resource.Id.button_no);" buttonNo.Click += (sender, e) => {"     var intent = new Intent();"     intent.PutExtra("returnText", " Activity.GetString(Resource.String.return_message_no));"     this.Activity.SetResult(Result.Ok, intent);"     this.Activity.Finish();" };"
  • 16. 戻り値を受け取る •  startActivityForResultで呼び出した Activityが終了了すると、onActivityResult の コールバックが呼ばれます。 public override void OnActivityResult (int requestCode, " Result resultCode, Intent data)" {"     if (requestCode == 1) {"         if (resultCode == Result.Ok) {"             var text = data.GetStringExtra ("returnText");"             Toast.MakeText (this.Activity, text, " ToastLength.Short).Show ();"         }"     } else {"         base.OnActivityResult (requestCode, resultCode, data);"     }" }
  • 17. フラグメント間の画⾯面遷移 •  Activityではなく、 MainActivityのMainFragmentを置き換えて SubFragmentを表⽰示する。 – 特にタブレットのときは重要。 •  FragmentManagerでできます。 •  <fragment> タグは遷移させるときはNG – FragmentManagerで⽣生成しないといけない。 – 今回のテンプレートはそのように構成されています。
  • 18. FragmentManagerを使った遷移 •  FragmentManagerをつかいます。 –  MainActivityのonCreateでは同じ⽅方法でAddで新規作成し ています。 –  Fragmentを⼊入れたLayoutのIDを引数に指定します。 –  AddToBackStackを呼び出すと、戻るボタンで戻れるようにな ります。 button05.Click += (sender, e) => {"     var transaction = this.FragmentManager.BeginTransaction();"     transaction.Replace(Resource.Id.fragment_container, " new SubFragment());"     transaction.AddToBackStack(null);"     transaction.Commit();" };"
  • 19. もっと暗黙的インテント! •  暗黙的インテントはいっぱいあります。 •  Intentクラスのリファレンスに⼀一覧あります。 – http://developer.android.com/reference/ android/content/Intent.html – Standard Activity Actions •  それぞれの使い⽅方は、インテントの名前でググれ ばOK。
  • 20. 定型⽂文メールアプリを作ろう! •  EditTextで⼊入⼒力力欄を作って •  ACTION_SENDTOで暗黙的インテントで送信
  • 21. まとめ •  Activityを使えば、⾃自分のアプリの中だけでなく、 ほかのアプリと連携できます。 – めんどっちい処理理はほかのアプリの丸投げでおk!
  • 22. 次回予告! •  8⽉月のアップデートでasync/await対応ktkr! •  ついに、実践編。 – @neuecc 先⽣生の  AsyncOAuth で Twitter クライアントを作ります。