今回は画面遷移を実装してみます。
要求仕様は次の3点。
- メイン画面のボタンを押下すると、サブ画面に遷移する
- サブ画面は画面中央にメッセージを表示する
- 画面遷移の際に、メイン画面からサブ画面に対して表示するメッセージを渡す
画面遷移と画面間のデータの受け渡しを勉強するのが目的です。
まずは、サブ画面を作成します。
メニューの[ファイル] - [新規] - [その他]から[Android] - [Android Activity]を選択すると、
新規アクティビティの作成ウィザードが表示されるので、画面に各項目を入力してサブ画面の
アクティビティを作成します。
作成するサブ画面はシンプルなものなので、BlankActivityを選択し、名前をSecondActivityとしました。
「完了」ボタンを押すと、srcフォルダ下のパッケージにSecondActivity.javaが追加されます。
この時点でSecondActivityにはTextViewが配置されているので、これを使ってメッセージを表示しようと思います。
とりあえず、レイアウトエディタ画面でTextViewにid="@+id/textView"を設定しておきます。
次は、メイン画面のボタンクリックハンドラに次画面を表示するコードを記述します。
public void onClickButton(View v)
{
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
}
Intentというのは各コンポーネントを結びつける役割をするものです。
上記のようにstartActivity()に渡すことで、Intentコンストラクタの第2引数に指定したActivityを開始させることができます。
最後に、メイン画面からサブ画面にメッセージを渡します。
メイン画面側は、先ほどのボタンクリックハンドラに1行追加します。
public void onClickButton(View v)
{
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("message", "Hello SecondActivity.");
startActivity(intent);
}
putExtra()は所謂key-valueペアです。上記の場合、keyを"message"としてメッセージを格納しています。
サブ画面側は、putExtra()で格納したメッセージを取得し、画面上のTextViewに表示します。
メッセージの取得と画面への表示は、画面表示と同時に行いたいので、サブ画面のOnCreate()の中に記述します。
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Intent intent = getIntent();
TextView textView = (TextView)findViewById(R.id.textView);
textView.setText(intent.getStringExtra("message"));
}
メイン画面でstartActivity()に渡したIntentは、getIntent()で取得することができます。
また、Intent.putExtra()で格納したメッセージはIntent.getStringExtra(key)で取得することができます。
上記のコードでは、先にメッセージ表示先のTextViewをidを使って取得し、Intent.getStringExtra(key)で取得した
メッセージをTextView.setText()で画面に表示しています。
これで実装完了です。
アプリを起動し、メイン画面のボタンを押下すると…
サブ画面が表示され、メイン画面から渡したメッセージが表示されました。