複数のActivityを持たせたAndroidアプリで、アクティビティを切り替える方法は?
Androidアプリを作成する場合、画面(アクティビティ)を複数持たせて、操作に応じて切り替えたい、というような場合があると思います。
Androidアプリに、Activityを追加する方法は以前紹介していますので、参考にしてください。
EclipseでのActivityの追加方法
別のアクティビティを起動させる方法を紹介します。
以前紹介した、音声発信やブラウザを起動させる場合と同じく、Intent(インテント)を使用します。
別のActivityを起動する方法を、二通り紹介したいと思います。
一つは、起動したActivityから戻り値が不要な場合、もう一つは起動したActivityから戻り値が必要な場合です。
起動させたActivityからの戻り値が不要な場合
例えば、xxxxというクラス名で作成したActivityを起動する場合、以下のコードだけです。
Intent i = new Intent(getApplicationContext(),xxxx.class);
startActivity(i);
ブラウザ起動する場合と同じく、Intentインスタンスを生成しますが、Intentへ渡すコンストラクタが違います。
同じAndroidアプリ内のActivityを起動させる場合は、第一引数はgetApplicationContext()で取得したContext型オブジェクトを、第二引数には、起動させるActivityのクラス名をセットします。
これは、起動させるActivityを、自分自身のアプリ内から見つけてくれ、という指示をしています。
スポンサーリンク
起動させたActivityからの戻り値が必要な場合
同じく、xxxxというクラス名で作成したActivityを、今度は戻り値を取得できるように起動する方法は以下のようになります。
Intent i = new Intent(getApplicationContext(),xxxx.class);
startActivityForResult(i,0);
先ほどの例との違いは、2行目のstartActivityForResult()を使用している、という点だけです。
第二引数は、リクエストコードと言います。
何の為に使用するかと言いますと、起動させたActivity側が、戻り値を受け取る場合に、どの起動での戻り値かを識別させるコードです。
ちょっと言葉にすると難しいですね。
戻り値を受け取るところを見れば、わかると思います。
戻り値の受け取りは、以下のイベントで取得できます。
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
}
上記のonActivityResult()を、Activityを呼び出す側のクラスに実装しておきます。
そして、呼び出したActivityが終了した後、戻ってきたときに上記のイベントが発生します。
この第一引数のrequestCodeに、startActivityForResult()で渡したリクエストコードが入ってきますので、それで処理を振り分けることができます。
(意図しないリクエストコードだったら、処理を飛ばす、等)
呼び出された側のActivityの、戻り値の返し方も説明しておきます。
以下のようにします。
i = new Intent();
setResult(RESULT_OK, i);
finish();
setResult()の第一引数が戻り値となります。
例えば、処理が成功した事を伝えたいのであればRESULT_OK、処理がキャンセルされた事を伝えたいのであれば、RESULT_CANCELEDを指定します。
これは、Activityクラスに宣言されている定数です。
int型であれば問題ないので、色んなパターンの戻り値が必要であれば、自分で定義した戻り値でもいいでしょう。
第二引数のIntentには、他に渡したい情報があれば、一緒に乗せていくこともできます。
i.putExtra()を使って、キーと値を渡しておけば、呼び出し側から取り出す事ができます。
putExtra()の説明は、以下の記事に書いています。
Androidで、起動させるActivityに値を渡す方法
今回は以上です。
No commented yet.