Activity同士での連携
Activity同士の連携は
startActivityForResult()
と
OverrideしたonActivityResult()で行う
startActivityForResult()で起動先のActivityを開始すれば
onActivityResult()で処理結果を受け取れる
処理結果は、起動先のActivityを終了したタイミングで呼び出される
まず、起動元Activityを実装する
ここで、startActivityForResult.によるActivityの開始
起動先のActivityから処理結果を受け取るonActivityResult()を実装する
まず、リクエストコードは定数宣言しておく
private static final int REQUEST_CODE = 1;
次に、ボタンを押してActivity連携したいので
onClick()をOverrideする
@Override
public void onClick(View v){
//呼び出す画面Intent作成
final Intent intent = new Intent(MainActivity.this, SendActivity.class);
//Intentのキーに文字列設定
EditText inputString = (EditText)findViewById(R.id.input);
String value = inputString.getText().toString();
input.putExtra("key_name",value);
//戻り値を取得できる呼び出し方法でActivity開始
startActivityForResult(intent, REQUEST_CODE);
}
次に、onActivityResult()のOverride
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode,resultCode,data);
//startActivityForResult()実行時の引数に指定したRequestCodeを比較する
if(requestCode == REQUEST_CODE){
//Activity終了時のフラグ判定
if(resultCode == RESULT.OK){
//戻り値として設定された key_nameの値を取得
String value = data.getStringExtra("key_name");
EditText result = (EditText)findViewById(R.id.result);
result.setText(value);
}
}
}
これで、元はできたので起動先のActivityを実装
起動先のActivityでは
Intent経由でパラメーターを受け取る
起動元のActivityへ処理結果を返すので
setResult()を使う
まずは、Intentで渡されたデータがあるか判定
!= nullなら中身ありなので、文字列を取得
Intent intent = getIntent();
if(intent != null){
//渡された文字列を取得
String sendvalue = intent.getStringExtra("key_name");
EditText getString = (EditText)findViewById(R.id.inputString);
getString.setText(sendvalue);
}
そして、起動元へ結果を送る処理の実装
findViewById(R.id.backActivity)setOnClickListener(
new onClickListener(){
@Override
public void onClick(View v){
EditText result = (EditText)findViewById(R.id.result);
//戻り値に文字列が設定されている場合、戻り値を設定
if(result.getText().length() > 0){
//戻り値のためのIntent作成
Intent data = new Intent();
//戻り値設定
data.putExtra("key_name",data.getText().toString());
//成功とさて設定
setResult(RESULT_OK, data);
}
//Activityの終了
finish();
}
});
Activityから別のActivityへパラメーターを渡すには
Intentにパラメーターを設定する
Intentは仲介役みたいなかんじ
Intentを受け取るには
getIntent()で受け取れる
なお、別のActivityを呼び出して、そこの結果を受け取りたいのなら
startActivityForResult()を使う
startActivityForResult()を使うことで
呼び出したActivityが終了したときに
onActivityResult()が呼ばれるので
setResult()で設定したIntentを戻り値として取得できる
注意点としては
startActivityForResult()は
onRestart()より前に呼ばれるので
処理のタイミングに注意すること