Androidアプリは、
Activityという単位で構成されています。
Activityは、WebサイトでいうWebページ1ページのようなものと考えてください。
ここでは、新しいActivityの始め方と、既存のActivityの終わり方を説明します。
新しいActivityの始め方
基本のコード
基本のコードは、以下のとおりです。
Intent intent = new Intent(getApplicationContext(), sampleNewActivity.class);
startActivity(intent);
まず、新しい intentを作ります。
第1引数の getApplicationContext()は、現在のActivityです。
第2引数の sampleNewActivity.classの部分には、開始したいActivityのクラス名を入れます。
その後、 startActivity(intent); で新しいActivityを開始します。
新しいActivityを開始すると
新しいActivityが開始されると、
既存のActivity(新しいActivityを開始する前に見ていたActivityですね)は、
破棄【されません】。
新しいActivityは、既存のActivityの上に覆いかぶさるようなイメージで開始されます。
そのため、新しいActivityを開始した後、
Androidの「戻る」ボタンを押すと、新しいActivityは破棄され、
既存のActivityが再び表示されるわけです。
新しいActivityから情報を受け取りたい場合
上記の通り、新しいActivityが開始されても、
既存のActivityは破棄されませんから、
既存のActivity → 新しいActivity → 既存のActivity
と移動した際に、新しいActivityから既存のActivityに、
何か情報を送りたい場合があるかもしれません。
例えば、既存のActivityに「テスト開始!」というボタンを置き、
それをタップすると、新しいActivityでテストを実行する。
その後、新しいActivityでテストが問題なく完了したら、
既存のActivityに戻ってきて、テスト結果を表示したい、
といったような場合です。
その場合、新しいActivityから、再び表示される既存のActivityに対して、
テストが問題なく完了したことを通知する必要があります。
このように、新しいActivityから既存のActivityに情報を送る
基本のコードは以下の通りです。
/* 既存のActivity */
int REQUEST_SUCCESS = 0;
Intent intent = new Intent(getApplicationContext(), sampleNewActivity.class);
startActivityForResult(intent, REQUEST_SUCCESS);
/* 新しいActivity */
// 結果を設定
Intent intent = new Intent();
intent.putExtra("STRING", "文字文字");
setResult(Activity.RESULT_OK, intent);
/* 既存のActivity */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode ==REQUEST_SUCCESS && resultCode == RESULT_OK) {
Log.v("TEST", data.getExtra("STRING"));
}
}
①まず、既存のActivityでリクエストコードを定義し、
通常通り intentのインスタンスを作ります。
②そのintentを、startActivityではなく、 startActivityForResultで開始します。
第2引数には、定義したリクエストコードを設定します。
③新しく開始されたActivityでは、色々処理を行った後、intent を作成し、putExtraで情報を設定します。
その後、setResult で結果を設定します。
第1引数のActivity.RESULT_OK という定数は、問題なく処理が終わったということです。
④再び既存のActivityに戻って、
onActivityResult というメソッドをオーバーライドします。
このメソッドは、新しいActivityが破棄されて、
既存のActivityに戻ってきたときに呼び出されます。
すなわち、ここで、
①requestCode ==REQUEST_SUCCESSによって、どの新しいActivityからの復帰か、がわかります。
(複数の新しいActivityが定義されている場合、「どこから帰ってきたのか?」がわからなくてはなりません)
②resultCode == RESULT_OKによって、新しいActivityは正常に完了したのか、がわかります。
(新しいActivityで、setResult にActivity.RESULT_OKを設定しましたよね)
これによって、
既存のActivityは、新しいActivityからの情報を受け取ることができます。
後は、第3引数に設定されているIntent の.getExtra()で、
新しいActivityから送られてきたデータを取得するだけです。
Activityの終わり方
Activityは、戻るボタンを押すなど、
ユーザーの操作によっても終了することができますが、
もちろん、アプリ側からプログラムによって終了させることもできます。
以下のコードで、現在アクティブになっている(表示されている)Activityを終了します。
finish();
コメントを残す