久しぶりの更新です。(書いた後で、似たようなエントリーを書いていたことに気がつきましたが、面倒なのでマージしませんでした)
ググれば出てくるんですが、サクッとトップ検索結果の上位に出てこない感じだったのでエントリーを追加しようと思います。
Activityから他のActivityを呼び出す際、intent変数を定義してstartActivityを実行しますが、練習を終えた後では引数を渡したくなるケースがあると思います。そんなときの書き方サンプルです。
あるActivityから、TestというActivity(定義済み)を呼び出す場合を取り上げます。
Intent intent = new Intent(this, Test.class); //①
intent.putExtra("key_name", value); //②
:
startActivity(intent); //③
これでOKです。
①はActivityにパラメータを渡す渡さないに関係なく決まった定義ですね。
②は①で定義した Intent型のオブジェクトに、パラメータを入れていきます。key_nameは、パラメータの受け渡しに使う文字列です。たとえば "abc" という名前で "5963" という値を渡したいとき、"abc" という名前を使って受け渡しをする感じです。
③はいつも通りです。呼び出し先Activityから戻ってきたとき、誰から戻ってきたかを知りたいときは、以下のようにします。
startActivityForResult(intent, 値(int));
第2引数に、自分で決めた特定の値を指定してください。よく見るケースでは、第2引数を
private static final int INTENT_XXX (XXXは自分で決める)
のように、値を変更することのない固定値として定義して、第2引数に渡します。
<追記:2016/10/05>
なお、ほかのActivityを呼び出した後、その結果を受けて処理したいときは、以下の記述を元のActivityに書いておきます。
以下は、現在コーディング中の秘密のアプリのコードです。呼び出し先Activityで、Number Pickerを使って値を決めた後、それを受け取ってEditTextのインスタンス(et_hourとか)にセットしています。上記説明にて「第2引数名はINTENT_XXX」と書いてますが、以下の例ではMODEx_NUMBERPICKERACTIVITYという変数を「事前」に定義しており、どのMODEでActivityを呼び出したかを区別して処理しています。
public void onActivityResult(int requestCode, int resultCode, Intent data){
if(resultCode==RESULT_OK){
Bundle extras = data.getExtras(); //呼び出し先のActivityから値をもらうとき必要
if(requestCode==MODE0_NUMBERPICKERACTIVITY){
String hour = extras.getString("hour");
String min = extras.getString("min");
String sec = extras.getString("sec");
et_hour.setText(hour);
et_minute.setText(min);
et_second.setText(sec);
}else if(requestCode==MODE1_NUMBERPICKERACTIVITY){
String hour = extras.getString("hour");
String min = extras.getString("min");
et_sc_hour.setText(hour);
et_sc_minute.setText(min);
}else if(requestCode==MODE2_NUMBERPICKERACTIVITY){
String min = extras.getString("min");
String sec = extras.getString("sec");
et_msg1_min.setText(min);
et_msg1_sec.setText(sec);
}
}
}
Activityの呼び出し側があれば、受け側も必要ですね。受け側は、こんな感じで書けばいいと思います。
Intent data = getIntent();
Bundle extras = data.getExtras();
String aaa = extras.getString("key_name1");
int bbb = extras.getInt("key_name2");
…とまあこんな感じです。下2行は記憶から引っ張ってきたので、間違えていたらゴメンナサイ。
<追記:2016/10/05>
受け側Activityの処理が終わったら、finish()を叩いてActivityを終わらせます。呼び出し元Activityに何らかの結果を返したければ、以下のように記述しておきます。
Intent intent = getIntent();
Bundle extras = intent.getExtras();
intent.putExtra("hour", tvHour.getText().toString());
intent.putExtra("min", tvMin.getText().toString());
intent.putExtra("sec", tvSec.getText().toString());
setResult(RESULT_OK, intent);
finish();
setResultに、必要であればRESULT_CANCELEDをセットして、「キャンセルしたよ」という情報を呼び出し元Activityに渡すのも可です。ここの記述と、上記に追記した内容は連携しています(例として)ので、参考までに。