【Androidアプリ開発】Activityの始め方、終わり方

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

 

コメントを残す

メールアドレスが公開されることはありません。