Your SlideShare is downloading. ×
夜子まま塾講義10(画面の呼び出し)
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

夜子まま塾講義10(画面の呼び出し)

935

Published on

新しい画面を作成し、画面から画面を呼び出す方法を解説します

新しい画面を作成し、画面から画面を呼び出す方法を解説します

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
935
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
10
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. Now Loading. Please Wait ... Twitter @yokmama Androidの別の画面の呼び出し① 夜子まま塾 講義10(画面連携 Intentによる呼び出し) Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 2. 自己紹介 氏名   :寺園聖文(てらぞの まさふみ) 肩書   :株式会社Re:Kayo-System 代表取締役社長 活動拠点 :神戸近郊∼日本→海外行きたい 著書   :「10日でおぼえるAndroidアプリ開発入門教室」著(翔泳社)       「HTML5によるAndroidアプリ開発入門」監修(日経BP) アプリ  :「JUST PLAYER」「Skip Memo」「ふりがなオートマチック」等 好きなもの:アニメ、決して萌えじゃない、見てるけど、あくまで研究の一環 嫌いなもの:とくになし 最近のテーマ:電子工作、運動すること、英語 Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 3. 新しい画面を作る ここまでは、HelloWorldで自動的に生成さ れた画面を修正してきましたが。 ここでは新規に画面を作成する手順を紹介 します。 Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 4. 新規レイアウト作成 File→Android XML File layoutのフォルダ上で右クリックメニュー からでも同じ事ができます。 Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 5. レイアウト情報入力 ① Resouce TypeでLayoutを選択 ② File名に submain.xmlを入力 ③ RelativeLayoutを選択 ④ 最後にFinishをクリック Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 6. 作成されたレイアウト Graphical Layout XML <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/ android" android:layout_width="match_parent" android:layout_height="match_parent" > </RelativeLayout> このレイアウトにボタンとテキストを配置します。 Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 7. レイアウトを編集 <?xml version="1.0" encoding="utf-8"?> ② 縦横がmatch_parentに <RelativeLayout なっていることを確認 xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/textView1" ③android_centerInParentに android:layout_width="wrap_content" android:layout_height="wrap_content" true を設定 android:text="Medium Text" android:layout_centerInParent="true" android:textAppearance="?android:attr/textAppearanceMedium" /> <Button ④幅をfill_parentにする android:id="@+id/button1" android:layout_width="fill_parent" android:layout_height="wrap_content" ⑤android:layout_margin android:layout_margin="5dip" android:layout_alignParentBottom="true" に5dipを設定 android:text="Back" /> </RelativeLayout> ⑥android:layout_alignParentBottom ①MediumTextとButtonを追加 にtrueを設定 ⑦android:text属に Back を設定 ※余計な属性が設定されている場合は削除してください。 Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 8. 画面の説明 前の画面からもらった 文字列を表示 前の画面に戻るボタン Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 9. 新規Javaクラス作成 File→Android XML File ykmjuku.android.sample007.appのパッケージ上 で右クリックメニューからでも同じ事ができます。 Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 10. クラス情報入力 ①NameにSubMainと入力 ②Browseボタンをクリック ③Activityを入力 ④OKボタンをクリック ⑤最後にFinishをクリック Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 11. 作成されたクラス package ykmjuku.android.sample007.app; import android.app.Activity; public class SubMain extends Activity { } このクラスに作成したレイアウトを表示する ように実装します。 Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 12. Overrideメソッドの追加 ActivityのonCreateを Overrideします。 ①コードを挿入したい箇所に カーソルを移動し、右クリッ クメニューを呼び出す。 ②メニューからSource→Override/ Implement Methodsを選択 Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 13. OnCreateメソッドの追加 package ykmjuku.android.sample007.app; import android.app.Activity; import android.os.Bundle; public class SubMain extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); } } ①ListからonCreateを選択する ② 追加を確認しCtrl+Sで保存する Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 14. レイアウトの設定 ②setContentView(int layoutResID): void - Activityを選択 ①super.onCreateの下の行でsetまで 入力しctrl+spaceで入力補完を行う Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 15. レイアウトの設定 ③同様にR.layoutまで入力し入力補 完ダイアログを表示する ④submain: int - R.layoutを選択 完成! Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 16. 現在の状況 SubMain package ykmjuku.android.sample007.app; import android.app.Activity; import android.os.Bundle; public class SubMain extends Activity { @Override Android  ? protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.submain); } Framwork } 存在を知らない Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 17. AndroidManifest.xmlを 開く ダブルクリック <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="ykmjuku.android.sample007.app" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="4" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".Ykmjuku007Activity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> AndroidManifest.xmlタブを選択 Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 18. Activityの宣言を追加 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="ykmjuku.android.sample007.app" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="4" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".Ykmjuku007Activity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".SubMain" 追加 android:label="@string/app_name"> </activity> </application> </manifest> Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 19. AndroidManifest.xmlに ついて AndroidManifest.xmlはAndroidアプリを作る上で必ず 一つ必要で、プロジェクトのトップ階層に置かなければ なりません。 このファイルには、ActivityやServiceといったアプリ内 の各画面やサービスの宣言や、動作可能なOSのバージョ ン、ハードウェアの種類、必要なパーミッションなどを 記述しています。 Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 20. HelloWorldに見る AndroidManifest.xml ①必須タグです。またルートタ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" グになります。アプリのバー package="ykmjuku.android.helloworld.app" android:versionCode="1" ジョンやパッケージを記述しま android:versionName="1.0" > す。 <uses-sdk android:minSdkVersion="14" /> <application ②動作可能なOSのバージョンで android:icon="@drawable/ic_launcher" android:label="@string/app_name" > す <activity android:name=".Ykmjuku003Activity" android:label="@string/app_name" > ③必須タグです。アプリ内に含 <intent-filter> <action android:name="android.intent.action.MAIN" /> まれるActivityやServiceなどを <category android:name="android.intent.category.LAUNCHER" 定義します。 /> </intent-filter> </activity> </application> ④作成したActivityクラスの宣 </manifest> 言です Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 21. activity要素 android:name 実装されたJavaクラス名です。 manifestで指定したpackageからの相対パスあるいは絶対パスで指定します。 packageの直下のクラスの場合頭に . を付けなければなりません。 android:label Activityの名称です。タイトルバーに表示されます。 intent-filter 他のアプリとの連携の設定です。 後で説明します。 Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 22. 追加したactivity要素 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="ykmjuku.android.sample007.app" android:versionCode="1" android:versionName="1.0" > <省略> <activity android:name=".SubMain" android:label="@string/app_name"> </activity> package指定から ykmjuku.android.sample007.app.SubMain を指しています。 Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 23. Activityの呼び出し 呼び出すクラスの情報をIntentに設定し、 startActivityを使って呼び出します。 Intentのコンストラクタ Intent(Context packageContext, Class<?> cls) 使用例 Intent intent = new Intent(this, SubMain.class); startActivity(intent); Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 24. 呼び出しボタン追加 shift+ctrl+Rから、main.xmlを入力し同ファイルを開く <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView ボタンを追加 android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </LinearLayout> Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 25. 呼び出し処理を実装 shift+ctrl+Tから、Ykmujuku007Activityを入力し同ファイルファイルを開く package ykmjuku.android.sample007.app; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class Ykmjuku007Activity extends Activity { 追加 /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btn = (Button)findViewById(R.id.button1); btn.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent intent = new Intent(Ykmjuku007Activity.this, SubMain.class); startActivity(intent); } }); } } Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 26. プログラムを実行 クリック Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 27. Intentとは Intentはアプリの情報を記述したクラスです。 設定されたIntentを使ってアプリを起動した り、アプリにメッセージを送ったりすること ができます。 Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 28. パラメータを渡す Intentには、アプリの情報の他にパラメータ も設定できます。設定されたパラメータは、 呼び出された側で取得することができます。 Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 29. Intentに設定 Intent putExtra(<キーの名前>, <設定する値>) でIntentに値を設定できます。 例) Intent intent = new Intent(Ykmjuku007Activity.this, SubMain.class); intent.putExtra("name", "夜子まま"); startActivity(intent); nameというキーで 夜子まま という値を設定している。 Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 30. 呼び出し側の実装 package ykmjuku.android.sample007.app; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class Ykmjuku007Activity extends Activity { private int mCount=0; 追加 /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btn = (Button)findViewById(R.id.button1); btn.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent intent = new Intent(Ykmjuku007Activity.this, SubMain.class); intent.putExtra("label", "Ykmjuku007が呼び出した数:"+(++mCount)); startActivity(intent); } }); } } Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 31. パラメータの取得 Intentに設定されたパラメータを取得す るにはActivityのもつgetIntentという メソッドを使って、呼び出しに使われた Intentを取得し設定されたパラメータを 取得することができます。 Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 32. Intentから取得 String intent.getStringExtra(<キーの名前>) 取得する値に型によって変わる、int型 の場合は getIntExtraを使う 例 Intent intent = getIntent(); String name = intent.getStringExtra("name") nameというキーで設定された値を取得 Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 33. 取得処理の実装 package ykmjuku.android.sample007.app; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class SubMain extends Activity { labelで設定された値を取得し @Override TextView1に設定 protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.submain); TextView textview = (TextView)findViewById(R.id.textView1); textview.setText(getIntent().getStringExtra("label")); Button btn = (Button)findViewById(R.id.button1); btn.setOnClickListener(new OnClickListener() { public void onClick(View v) { finish(); } おまけ、 }); } 戻るボタンの実装 finishでアプリ } を閉じることができます。 Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 34. プログラムの実行 クリック 呼び出すとどんどん数字 が増える。 Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 35. 戻り値の取得 呼び出したアプリから戻り値を取得する場 合もIntentを使います。 また戻り値を取得する場合は専用のメソッ ドで呼び出し、かつ、専用のメソッドで受 け取る必要があります。 Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 36. 戻り値付きの呼び出し void startActivityForResult(Intent, <リクエストID>) リクエストIDはInt型の数値です。値を取得する際 に誰に呼び出されたかを判断する際に使います。 例 startActivityForResult(intent, 0); リクエストIDを0で呼び出す ※その場で結果が取得できないところがポイントです。 Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 37. 戻り値の設定 戻り値はActivityが終了剃る前に専用 のメソッド設定します。 void setResult(<戻り値のID>、Intent) Activityに準備されている成功時に使う定数。この 他にもRESULT_CANCELDなどがある。 第三者のアプリからも呼ばれることを考える場合、 例 デフォルトの定数を使うのが望ましい Intent intent = new Intent(); intent.putExtra("result", textview.getText()); setResult(RESULT_OK, intent); Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 38. 戻り値の取得 ActivityのもつonActivityResultに結 果が帰ってくるので、このメソッドを Overrideして結果を取得します。 protected void onActivityResult (int requestCode, int resultCode, Intent data) 例 呼び出すときに設定した値 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == 100){ //処理 } 戻ってきた値 } Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 39. 呼び出し側の実装 package ykmjuku.android.sample007.app; <省略> public class Ykmjuku007Activity extends Activity { private final int REQUEST_ID = 0; private int mCount=0; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); 追加 setContentView(R.layout.main); Button btn = (Button)findViewById(R.id.button1); btn.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent intent = new Intent(Ykmjuku007Activity.this, SubMain.class); intent.putExtra("label", "Ykmjuku007が呼び出した数:"+(++mCount)); startActivityForResult(intent, REQUEST_ID); } } }); 変更 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == REQUEST_ID){ Button btn = (Button)findViewById(R.id.button2); if(resultCode == RESULT_OK){ btn.setText("OK:"+data.getStringExtra("result")); } else{ btn.setText("ERROR:"+data.getStringExtra("result")); } } } } Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 40. 呼び出された側の実装 package ykmjuku.android.sample007.app; <省略> public class SubMain extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.submain); TextView textview = (TextView)findViewById(R.id.textView1); textview.setText(getIntent().getStringExtra("label")); Button btn = (Button)findViewById(R.id.button1); btn.setOnClickListener(new OnClickListener() { public void onClick(View v) { 追加 TextView textview = (TextView)findViewById(R.id.textView1); Intent intent = new Intent(); intent.putExtra("result", textview.getText()); setResult(RESULT_OK, intent); finish(); } }); } } Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 41. ここまでのコードの サンプル プロジェクト名:ykmjuku007 http://bit.ly/zJfDY0 Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 42. 中級向け 問題 これまで作った電卓プログラムと 新しい画面を連携させてみよう。 前回作った電卓 計算 1 1 1 1 1 1 1 1 1 1 1 1 計算結果を返し、テキストボッ ykmjuku008 クスに設定する http://bit.ly/x4rOm5 Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012
  • 43. ダイアログは? 続きは夜子まま塾オンライン(無料)にて 毎週水曜日夜10:30∼11:00 (都合によりない場合もあります) 夜子まま塾 http://bit.ly/wTjjix GoogleID:101190223376062765723 上記アカウントをサークルに追加していると、 ハングアウトのお誘いが届きます。 是非ご参加ください。 Re:Kayo-System Co.,Ltd.Wednesday, March 7, 2012

×