【android勉強会】第一回activity & intent
DESCRIPTION
TRANSCRIPT
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!