Activity同士での連携
Activity同士の連携は
startActivityForResult()
と
OverrideしたonActivityResult()で行う
startActivityForResult()で起動先のActivityを開始すれば
onActivityResult()で処理結果を受け取れる
処理結果は、起動先のActivityを終了したタイミングで呼び出される
まず、起動元Activityを実装する
ここで、startActivityForResult.によるActivityの開始
起動先のActivityから処理結果を受け取るonActivityResult()を実装する
まず、リクエストコードは定数宣言しておく
1 | private static final int REQUEST_CODE = 1 ; |
次に、ボタンを押してActivity連携したいので
onClick()をOverrideする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | @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なら中身ありなので、文字列を取得
1 2 3 4 5 6 7 8 | Intent intent = getIntent(); if (intent != null ){ //渡された文字列を取得 String sendvalue = intent.getStringExtra( "key_name" ); EditText getString = (EditText)findViewById(R.id.inputString); getString.setText(sendvalue); } |
そして、起動元へ結果を送る処理の実装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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()より前に呼ばれるので
処理のタイミングに注意すること