Androidの画面遷移(2)
アクティビティの起動とIntent
では、そのような挙動をソースコードではどのように記述するのか、解説していきます。これは、以下の3ステップで記述でき、具体的には、リスト2の(10)~(12)です。その際中心となるクラスがIntentクラスで、このクラスが画面、すなわちアクティビティの起動をつかさどります。
1)Intentクラスをnewします(リスト2の(10))。その際、引数が2個必要です。
引数1はコンテキストです。ここでは、「MenuListActivity.this」と記述しています。
引数2は起動するActivityクラス名です。クラス名ですので、拡張子「.class」を使います。ここでは、「MenuThanksActivity.class」と記述しています。
2)起動先アクティビティに渡すデータを格納します(リスト2の(11))。これは、1)でnewしたIntentオブジェクトのputExtra()メソッドを使います。引数1にデータの名称、引数2にデータそのものを渡します。なお、起動先アクティビティにデータを渡す必要がない場合は、このステップそのものは不要です。
3)アクティビティを起動します。これは、ActivityクラスのstartActivity()メソッドを使い、引数として1)でnewしたIntentオブジェクトを渡します(リスト2の(12))。
これで、注文完了画面が起動します。
データの受け取り
では、起動した注文完了画面では、どのようにして引き継ぎデータを受け取ればいいのでしょうか。ここでもIntentが活躍します。具体的には、リスト3の(1)と(2)です。
(1)でIntentオブジェクトを取得します。これは、ActivityクラスのgetIntent()メソッドを使います。これで、このアクティビティの起動に関連したIntentオブジェクトが取得できます。
取得したIntentオブジェクトのget○●Extra()メソッドを使って引き継ぎデータを取得します。引数として、データの名称を渡します。これが(2)です。ただし、このメソッド名の「○●」はデータ型で変わっています。今回はString型ですので、getStringExtra()となっています。
リスト3の(2)以降の処理に関しては、ここで取得した引き継ぎデータを、それを表示させるTextViewにセットしている処理です。
このデータの引継ぎ処理のため、注文完了画面ではリストでタップした定食名と金額が表示できるのです。
onClick属性
最後に「リストに戻る」ボタンの処理を解説します。
まず、MenuThanksActivityにはボタンのリスナクラスが存在しません。ボタンなどのタップ時の処理、つまり、onClick処理というのは、非常によくある処理です。ですので、onClickに関しては、リスナ登録の代わりとなる便利な機能がAndroidには用意されています。それが、onClick属性です。activity_menu_thanks.xmlの<Button>タグに
android:onClick="onBackButtonClick"
という属性を確認できると思います。
Activityクラスで
public void onBackButtonClick(View view)
のように、戻り値がvoidで、引数がView型ひとつのメソッドを記述します(リスト3の(3))。このメソッド名をandroid:onClick属性として記述すると、リスナ登録などを自動で行ってくれます。
今回は、この方法を使い、「リストに戻る」ボタンの処理を記述しています。
戻るは終了
さて、そのonBackButtonClick()メソッド内の処理というのは、
finish();
の1行のみです(リスト3の(4))。このfinish()はActivityクラスのメソッドで、自身を終了させるメソッドです。上述の通り、Androidでは、画面に「戻る」というのは通常の「戻る」という考えではなく、自身が消滅することで下に隠れていた画面が表に出てくることです。ですので、表記として「リストに戻る」というボタンであっても、実際の処理はアクティビティの終了を行います。