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()より前に呼ばれるので
処理のタイミングに注意すること