【android勉強会】第一回activity & intent

39

Click here to load reader

Upload: ishin-fukuoka

Post on 05-Dec-2014

859 views

Category:

Documents


0 download

DESCRIPTION

 

TRANSCRIPT

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

Ishin FUKUOKA

Activity & Intent

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

Activity & Intent Activityとは

Activityのライフサイクル

レイアウトリソースとの関連付け・イベントリスナー

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

Activity & Intent Intentとは

明示的インテント/暗黙的インテント

アクティビティの構造

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

Activityとは

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

Activity=画面 いやまあ正確には違うんだけど…

Page 6: 【Android勉強会】第一回Activity & intent
Page 7: 【Android勉強会】第一回Activity & intent

内容(ざっくり) @Overrid

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

………

}

画面での初期処理を行なう

詳しくは次のライフサイクルの説明で

setContentView(layout);

引数にとったlayouをActivityに追加する

findViewById(id);

引数にとったidのViewを取得

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

Activityのライフサイル

Page 9: 【Android勉強会】第一回Activity & intent
Page 10: 【Android勉強会】第一回Activity & intent

Activityのライフサイクル onCreate() アクティビティの生成時に呼ばれる。画面の初期化やビューとの関連付など。

onPause() アクティビティが表示画面から離れるとき

アクティビティの一生・・・onCreate() ~ onDestroy()

画面が存在する期間・・・onStart()~onStop()

ユーザが操作(タッチ等)できる期間・・・onResume() ~ onPause()

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

Activityのライフサイクル アクティビティはスタック構造で管理されている

アクティビティが新たに生成されるとスタックに積まれる

ユーザが操作できるのはスタックの一番上にあるアクティビティ

詳しくはIntentのあとで

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

レイアウトリソース との関連付け・イベントリスナー

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

レイアウトリソースとの関連付け

Button button = (Button)findViewById①(R.id.button);

xmlファイルに記述したボタンなどのビューに関して,Javaソースでidを引数に取ることによってそのオブジェクトを取得できる

→findViewById(id)

取得したオブジェクトに「クリック時の振る舞い」などをセットできる

→setOnClickListener( new View.OnClickListener())

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

イベントリスナーの実装 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)にて処理を記述

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

イベントリスナーの実装

別の書き方(こっちの方が馴染みがあるかも)

………

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);

}

};

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

レイアウトリソースとの関連付け

イベントリスナー以外にも

テキストビューに文字を設定したり、EditTextから文字を取得したり様々なことができる。

TextView tv = (TextView)findViewById(R.id.tv1);

tv.setText(“XXX”);

UI操作はイベントリスナーでだいたいできる

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

Intentとは

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

Intentとは あるコンポーネントからの要求(メッセージ)をシステムへ投げる仕組み。アクティビティやサービスなどに対して何かしらの動作を要求するときにメッセージを投げる。

アクティビティやサービスで使われる(今回はアクティビティでの使い方のみ説明します)

アクティビティの画面遷移などでよく使われる

アプリ内の遷移→明示的インテント

アプリ間の遷移→暗黙的インテント

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

Intentとは

呼び出し元のアクティビティがMainActivity,

呼び出し先のアクティビティがSecondActivityの場合

(=Mainactivity→SecondActivityの画面遷移)

Intent intent=new Intent(MainActivity.this, SecondActivity.class);

startActivity(intent);

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

明示的インテント

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

明示的インテント Intentクラスのインスタンスを生成,

startActivity(intent)で遷移先のアクティビティがスタックに積まれる

Intent.putExtra(String Key,Object obj)でアクティビティ間でデータを渡すことができる。

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

明示的インテント 呼び出し元のアクティビティ(データ送る側) Intent intent=new Intent(MainActivity.this, SecondActivity.class);

Intent.putExtra(“KEY”,value); //String型の変数value

startActivity(intent);

遷移先のアクティビティ(データ受け取る側) Intent i= getIntent();

String value = i.getStringExtra(“KEY”);

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

暗黙的インテント

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

暗黙的インテント

インテントを使う際に呼び出したいアプリの条件を指定することでAndroidが条件に合うインテントフィルタを持つアプリを抽出してくれる

暗黙的インテントを使うことで他アプリと連携することができる

Intent-filter

AndroidManifest.xmlに記載

呼び出される側で設定

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

暗黙的インテント ブラウザ呼び出し 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");

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

暗黙的インテント

最初に表示されるアクティビティに設定されているインテントフィルタ

<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>

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

Activityの構造

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

Activityの構造

スタック ― 複数のアクティビティを管理する構造

タスク ― アクティビティ遷移の一連の流れをまとめたもの。一つのアプリケーションから遷移したアクティビティは同じタスクに入る。

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

Activityの構造

あるアプリのアクティビティActivityA, ActivityB

ActivityA ActivityA

ActivityB

ActivityA

ActivityB

ActivityA

全てデフォルトでは同じタスクで管理される。 また、同じアクティビティでも新たに生成され スタックに積まれる。

ActivityA

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

Activityの構造 あるアプリのアクティビティ ActivityA, ActivityB 暗黙的インテントでActivityBから呼び出された別のアプリのアクティビティ ActivityP

ActivityA ActivityA

ActivityB

ActivityA

ActivityB

ActivityP

全て同じスタックの上に積まれ、同じタスクで管理される。

→LaunchModeで管理方法を変えられる

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

Activityの構造:LaunchMode

AndroidManifest.xmlのactivityタグに記述

<activity

android:name="sample.myapplication3.app.ActivityA"

android:launchMode="standard">

</activity>

standard,singleTop,singleTask,singleInstanceの4種

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

Activityの構造:LaunchMode

ActivityA,ActivityB:standard

ActivityA ActivityA

ActivityB

ActivityA

ActivityB

ActivityA

ActivityB 呼出 ActivityA 呼出

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

Activityの構造:LaunchMode

ActivityA:standard ActivityB:singleTop

ActivityA ActivityA

ActivityB

ActivityA

ActivityB

ActivityB 呼出 ActivityB 呼出

onNewIntent()

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

Activityの構造:LaunchMode

ActivityA:standard ActivityB:singleTask

ActivityB ActivityB

ActivityA

ActivityB

ActivityA 呼出 ActivityB 呼出

onNewIntent()

finish(),バックキー押下時と同じ動き

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

Activityの構造:LaunchMode

ActivityA,ActivityC:standard ActivityB:singleInstance

ActivityA ActivityA ActivityB

ActivityB 呼出 ActivityC 呼出

ActivityA

ActivityC

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

まとめ Activityとは

Activityのライフサイクル

ActivityとLayoutファイルの関連付け、イベントリスナーの実装

Button btn = (Button)findViewById(R.id.btn);

btn.setOnClickListener(. . . . . ( )

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

まとめ Intentとは

明示的インテント/暗黙的インテント

Intent intent = new Intent(Main.this,Second.class);

startActivity(intent);

Activityのスタック構造とインテントによる呼び出しの仕組み

( )

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

Thank you for Listening.

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

演習 イベントリスナー+画面遷移+値渡し

Click!