画面遷移
アクティビティより、別のアクティビティへ画面遷移する事ができる。
画面遷移をおこなうには、インテント(Intent)オブジェクトに画面の遷移情報を設定して、startActivityメソッドを実行する。
また、遷移先からの結果情報を取得したい場合には、startActivityメソッドのかわりにstartActivityForResultメソッドを使う。
Intentオブジェクトはいろいろな使い方ができますが、今回は画面遷移が目的ですので、それについてはふれない事にします。
Intentについては「謎めいたインテント」も参照して下さい。
単純な画面遷移の例
画面遷移を単純に実行するだけの、プログラムの例をみてみます。
このプログラムを実行すると、タイトルが「メイン・アクティビティ」であるアクティビティ画面が表示されます。
「画面遷移」ボタンを押すと、タイトルが「サブ・アクティビティ」のアクティビティ画面に遷移します。
「戻る」ボタンを押すと、「メイン・アクティビティ」画面に戻ります。
まず、遷移元のアクティビティの、プログラムを以下に示します。
画面遷移プログラム1(1)-遷移元アクティビティ(ToOtherActivity1.java)
26,27行目で、画面の遷移情報をインテントに設定しています。
OtherActivityは遷移先のアクティビティクラスです。29行目のstartActivityメソッドで、インテント情報をもとに画面遷移を実行します。
21行目のsetTitleメソッドは、どのアクティビィテイ画面が表示されているか識別できるように、アクティビティのタイトルを設定しています。
以下に遷移先のアクティビティのコードを示します。
画面遷移プログラム1(2)-遷移先アクティビティ(OtherActivity.java)
「戻る」ボタンが押されると、24行目のfinishメソッドでアクティビティが終了して、遷移元の画面に戻ります。
遷移先のアクティビティをアンドロイドが認識するためには、マニフェストファイル「AndroidManifest.xml」に アクティビティを登録(14行目)する必要があります。
画面遷移プログラム1(3)-マニフェストファイル(AndroidManifest.xml)
遷移先画面にパラメータを渡す。
遷移先画面に、遷移元の情報を渡す事ができます。
遷移先画面にパラメータを受け渡すには、 インテントにputExtraメソッドを使って、渡したいデータのキー文字列と値を指定します。
以下に、遷移元のアクティビティクラスの、プログラム例を示します。
画面遷移プログラム2(1)-遷移元アクティビティ(ToOtherActivity2.java)
putExtraメソッドには、いろいろな型のパラメータを渡す事ができるように、オーバーライトされた多くのメソッドが存在しています。
オブジェクトにSerializableインターフェースを実装すると、オブジェクトを渡す事もできるようになります。
29行目でSerializableインターフェースを実装した、Personクラスのオブジェクトを渡しています。オブジェクトは、一旦、別のオブジェクトにコピーして渡されるようです。
以下に、渡されたパラメータを受け取る遷移先のアクティビティのプログラムを示します。
画面遷移プログラム2(2)-遷移先アクティビティ(OtherActivity.java)
遷移先から渡されたパレメータを取得するには、getIntentメソッドでIntentオブジェクトを取得して、 そのIntentオブジェクトのメソッドを使って値を取得します。
値を取得するためのメソッドは、パラメータの型によって異なります。
例えば、int型の値を取得するには22行目のようにgetIntExtraメソッドを (getIntExtraメソッドの第2引数には、対応するキーが存在しないときの戻り値を指定します。)、 文字列を取得するにはgetCharSequenceExtraメソッド(23行目)を、 Serializableインターフェースを実装したオブジェクトを取得するにはgetSerializableExtraメソッド(24行目)を使用します。
他にも、いろいろな型のメソッドが用意されています。
詳しくは、 Intentクラスのリファレンスを参照して下さい。
以下に、上記プログラムで使用しているSerializableクラスを実装したPersonクラスのコードを示します。
画面遷移プログラム2(3)-Personクラス(Person.java)
もちろん、マニフェストファイル(AndroidManifest.xml)には、遷移先のアクティビティの登録が必要です。遷移先のアクティビティから実行結果を返す。
逆に、遷移先のアクティビティから遷移元のアクティビティに、アクティビティの実行結果を返すことができます。
以下にそのプログラムの例を示します。
画面遷移プログラム3(1)-遷移元アクティビティ(ToOtherActivity3.java)
画面遷移プログラム3(2)-遷移先アクティビティ(OtherActivity.java)
このプログラムを実行して、「画面遷移」ボタンを押すと遷移先の画面が表示されます。
遷移先の画面は、以下のようにテキストボックスと、「Ok」,「キャンセル」ボタンがあります。
テキストボックスに何か入力して、「Ok」ボタンを押すと遷移元画面に戻り、入力された文字をトーストで表示します。
「キャンセル」ボタンを押すと、遷移元画面に戻るだけでトーストは表示されません。
《「画面遷移」ボタンが押された時の動作》 画面遷移プログラム3(1)-30行目
「画面遷移」ボタンが押されると、画面遷移情報を持つインテントオブジェクトとリクエストコードを引数に指定して、 startActivityForResultメソッドを実行します。
リクエストコードは、遷移先から戻ってきた時にどのstartActivityから戻ってきたかを識別するための値です。
このリクエストコードには、正のint型の値を指定します。
遷移先のアクティビティから実行結果を返えさない場合には、startActivityメソッドを使って画面先のアクティビィティを呼び出していましたが、 実行結果を戻す場合はstartActivityForResultメソッドを使います。
《遷移先画面でのボタンが押された時の動作》 画面遷移プログラム3(2)-28~31,40~41行目
「Ok」ボタンが押されると、インテントオブジェクトを作成してputExtraメソッドにより、テキストボックスの入力値をインテントに格納します。
setResultメソッドにより、アクティビティの実行結果(Activityクラスに定義されている定数RESULT_OK)と,インテントをセットして、 finishメソッドによりアクティビティを終了します。
「キャンセル」ボタンが押された場合には、setResultメソッドによりRESULT_CANCELED定数をセットして、アクティビティを終了します。
Activityクラスには、RESULT_FIRST_USER定数も定義されていて、この定数を使って独自に定義した実行結果を返す事もできます。
《遷移元に戻ったときの動作》 画面遷移プログラム3(1)-43~55行目
遷移元に戻ると、遷移元アクティビティのonActivityResultイベントが発生します。
このイベントメソッドに、画面遷移から戻って来た時の処理を記述します。
ここでは、どの画面遷移要求に対して戻ってきたのかrequestCode引数より判断、実行結果がRESULT_OKであれば、 渡されたテキストボックスの値を取得してトーストに表示しています。
参考URL
- Android Developers
- 開発ガイド
- リファレンス