【Android勉強会】第一回Activity & intent

1,561 views

Published on

  • Be the first to comment

【Android勉強会】第一回Activity & intent

  1. 1. Ishin FUKUOKA Activity & Intent
  2. 2. Activity & Intent  Activityとは  Activityのライフサイクル  レイアウトリソースとの関連付け・イベントリ スナー
  3. 3. Activity & Intent  Intentとは  明示的インテント/暗黙的インテント  アクティビティの構造
  4. 4. Activityとは
  5. 5. Activity=画面いやまあ正確には違うんだけど…
  6. 6. 内容(ざっくり) @Overrid protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ……… } 画面での初期処理を行なう 詳しくは次のライフサイクルの説明で setContentView(layout); 引数にとったlayouをActivityに追加する findViewById(id); 引数にとったidのViewを取得
  7. 7. Activityのライフサイル
  8. 8. Activityのライフサイクル  onCreate() アクティビティの生成時に呼ばれ る。画面の初期化やビューとの関連付など。  onPause() アクティビティが表示画面から離 れるとき アクティビティの一生・・・onCreate() ~ onDestroy() 画面が存在する期間・・・onStart()~onStop() ユーザが操作(タッチ等)できる期間・・・onResume() ~ onPause()
  9. 9. Activityのライフサイクル  アクティビティはスタック構造で管理されて いる  アクティビティが新たに生成されるとスタッ クに積まれる  ユーザが操作できるのはスタックの一番上に あるアクティビティ  詳しくはIntentのあとで
  10. 10. レイアウトリソース との関連付け・イベントリスナー
  11. 11. レイアウトリソースとの関連付け Button button = (Button)findViewById①(R.id.button);  xmlファイルに記述したボタンなどのビューに関 して,Javaソースでidを引数に取ることによってそ のオブジェクトを取得できる →findViewById(id)  取得したオブジェクトに「クリック時の振る舞 い」などをセットできる →setOnClickListener( new View.OnClickListener())
  12. 12. イベントリスナーの実装 Button button = (Button)findViewById①(R.id.button); button.setOnClickListener②(new View.OnClickListener() { public void onClick(View v)③ { Intent intent=new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); } }); ①idからButtonオブジェクトを取得 ②View.setOnclickListener(View.OnClickListener i)メソッドでbuttonオブ ジェクトがクリックされた時の振る舞いを実装 ③View.OnClickListenerインターフェースの抽象メソッドonClick(View v)に て処理を記述
  13. 13. イベントリスナーの実装 別の書き方(こっちの方が馴染みがあるかも) ……… Button button = (Button)findViewById①(R.id.button); button.setOnClickListener②(new ButtonClickListener()); } class ButtonClickListener implements OnClickListener{ public void onClick(View v)③ { Intent intent=new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); } };
  14. 14. レイアウトリソースとの関連付け イベントリスナー以外にも テキストビューに文字を設定したり、EditTextから 文字を取得したり様々なことができる。 TextView tv = (TextView)findViewById(R.id.tv1); tv.setText(“XXX”); UI操作はイベントリスナーでだいたいできる
  15. 15. Intentとは
  16. 16. Intentとは  あるコンポーネントからの要求(メッセージ)をシ ステムへ投げる仕組み。アクティビティやサービ スなどに対して何かしらの動作を要求するときに メッセージを投げる。  アクティビティやサービスで使われる(今回はア クティビティでの使い方のみ説明します)  アクティビティの画面遷移などでよく使われる アプリ内の遷移→明示的インテント アプリ間の遷移→暗黙的インテント
  17. 17. Intentとは 呼び出し元のアクティビティがMainActivity, 呼び出し先のアクティビティがSecondActivityの 場合 (=Mainactivity→SecondActivityの画面遷移) Intent intent=new Intent(MainActivity.this, SecondActivity.class); startActivity(intent);
  18. 18. 明示的インテント
  19. 19. 明示的インテント  Intentクラスのインスタンスを生成, startActivity(intent)で遷移先のアクティビティ がスタックに積まれる  Intent.putExtra(String Key,Object obj)でアクティ ビティ間でデータを渡すことができる。
  20. 20. 明示的インテント 呼び出し元のアクティビティ(データ送る側) Intent intent=new Intent(MainActivity.this, SecondActivity.class); Intent.putExtra(“KEY”,value); //String型の変数value startActivity(intent); 遷移先のアクティビティ(データ受け取る側) Intent i= getIntent(); String value = i.getStringExtra(“KEY”);
  21. 21. 暗黙的インテント
  22. 22. 暗黙的インテント  インテントを使う際に呼び出したいアプリの条件 を指定することでAndroidが条件に合うインテント フィルタを持つアプリを抽出してくれる  暗黙的インテントを使うことで他アプリと連携す ることができる Intent-filter  AndroidManifest.xmlに記載  呼び出される側で設定
  23. 23. 暗黙的インテント  ブラウザ呼び出し Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.google.co.jp"));  地図呼び出し Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("geo:0,0?waseda"));  共有呼び出し(テキストデータ渡し) Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_TEXT,"Hello,Google");
  24. 24. 暗黙的インテント  最初に表示されるアクティビティに設定されているインテントフィルタ <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>  テキストを受け取るインテントフィルタ <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain"/> </intent-filter>
  25. 25. Activityの構造
  26. 26. Activityの構造  スタック ― 複数のアクティビティを管理する 構造  タスク ― アクティビティ遷移の一連の流れを まとめたもの。一つのアプリケーションから遷 移したアクティビティは同じタスクに入る。
  27. 27. Activityの構造 あるアプリのアクティビティActivityA, ActivityB ActivityA ActivityA ActivityB ActivityA ActivityB ActivityA 全てデフォルトでは同じタスクで管理される。 また、同じアクティビティでも新たに生成され スタックに積まれる。 ActivityA
  28. 28. Activityの構造 あるアプリのアクティビティ ActivityA, ActivityB 暗黙的インテントでActivityBから呼び出された別のアプ リのアクティビティ ActivityP ActivityA ActivityA ActivityB ActivityA ActivityB ActivityP 全て同じスタックの上に積まれ、同じタスクで管理される。 →LaunchModeで管理方法を変えられる
  29. 29. Activityの構造:LaunchMode  AndroidManifest.xmlのactivityタグに記述 <activity android:name="sample.myapplication3.app.ActivityA" android:launchMode="standard"> </activity>  standard,singleTop,singleTask,singleInstanceの4種
  30. 30. Activityの構造:LaunchMode ActivityA,ActivityB:standard ActivityA ActivityA ActivityB ActivityA ActivityB ActivityA ActivityB 呼出 ActivityA 呼出
  31. 31. Activityの構造:LaunchMode ActivityA:standard ActivityB:singleTop ActivityA ActivityA ActivityB ActivityA ActivityB ActivityB 呼出 ActivityB 呼出 onNewIntent()
  32. 32. Activityの構造:LaunchMode ActivityA:standard ActivityB:singleTask ActivityB ActivityB ActivityA ActivityB ActivityA 呼出 ActivityB 呼出 onNewIntent() finish(),バックキー押 下時と同じ動き
  33. 33. Activityの構造:LaunchMode ActivityA,ActivityC:standard ActivityB:singleInstance ActivityA ActivityA ActivityB ActivityB 呼出 ActivityC 呼出 ActivityA ActivityC
  34. 34. まとめ  Activityとは  Activityのライフサイクル  ActivityとLayoutファイルの関連付け、イベントリ スナーの実装 Button btn = (Button)findViewById(R.id.btn); btn.setOnClickListener(. . . . .( )
  35. 35. まとめ  Intentとは  明示的インテント/暗黙的インテント Intent intent = new Intent(Main.this,Second.class); startActivity(intent);  Activityのスタック構造とインテントによる呼び 出しの仕組み ( )
  36. 36. Thank you for Listening.
  37. 37. 演習  イベントリスナー+画面遷移+値渡し Click!

×