Activity間で、計算結果や入力値など何らかの値をやり取りしたい場合がある。
そのような場合は、Intentを使って値のやり取りができる。
Intentとは
Activityから他のActivityを呼び出したい場合、「android.content.Intent」というクラスを使う。
Intentクラスは、以下2点を格納する入れ物のようなものである。
1.呼び出しActivityを決める情報
2.呼び出しActivityに渡したい情報
Intentを用いたActivityの呼び出し
Intentに必要な情報を設定し、startActivityメソッドに引数として渡すと、指定されたActivityが呼び出される。
次のコードでは、ボタンをクリックしたときにIntentに呼び出したいActivityである
SubActivityのクラスを設定し、startActivityメソッドでActivityを呼び出している。
Button button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//setOnClickListenerのコンストラクタ内でthisを指定すると
//setOnClickListenerのインスタンスをさしてしまうので、
//MainActivity.thisとする。
Intent intent = new Intent(MainActivity.this,SubActivity.class);
startActivity(intent);
Activity間での値のやり取り
Activity間で値をやり取りするには、呼び出し元ActivityでIntentに値を設定し、
呼び出し先ActivityでIntentから値を取得すればいい。
Intentに値を設定するにはputExtraメソッド、Intentから値を取得するにはgetStringExtraメソッドを使う。
次のコードは、呼び出し元Activityのコードで、
ボタンがクリックされた時に、Intentに呼び出し先Activityと渡したい値を設定している。
この例では、キーと文字列の組をIntentに設定している。
Button button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText editText =(EditText)findViewById(R.id.editText);
String textString = editText.getText().toString();
Intent intent = new Intent(MainActivity.this,SubActivity.class);
intent.putExtra(KEY,textString);
startActivityForResult(intent,SUB_ACTIVITY_REQUEST);
次のコードは、呼び出し先Activityのコードで、
呼び出し元で設定されたキーに対応する文字列を取得し、画面に表示する。
Intent intent = getIntent();
String str = intent.getStringExtra(MainActivity.KEY);
editText.setText(str);
TextView textView = (TextView)findViewById(R.id.subTextView);
textView.setText("こんにちは!"+str+"さん");