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

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