処理順序
- startActivityForResultメソッドを使い、他のActivityを呼び出す。
- 呼び出された側のActivityが必要な処理を行い、処理が終わると、このActivityは終了する。
- 呼出元ActivityのonActivityResultメソッドが呼ばれる。
startActivityForResultメソッドは、例えば、「本体設定」画面から入力された値を取得する場合に有用かもしれません。
参考:「本体設定」の「音の設定」画面を表示する
呼び出す側
public class ForResultActivity extends Activity
implements
OnClickListener
{
final String TAG = "My";
static final int PICK_CONTACT_REQUEST = 0;
Button bu;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
bu = (Button)findViewById(R.id.Button);
bu.setOnClickListener(this);
}
@Override
public void onClick(View v){
if(v==bu){
Intent it;
it = new Intent(this, WorkerActivity.class);
try{
startActivityForResult(it, PICK_CONTACT_REQUEST);
}
catch(ActivityNotFoundException e){
Log.e(TAG, "ActivityNotFoundException");
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==PICK_CONTACT_REQUEST){
//「戻る」キーの押し下げでも、ここに来る。
if(resultCode==RESULT_OK){
//「戻る」キーの押し下げでは、ここには来ない。
Log.i(TAG, "RESULT_OK");
Log.i(TAG, data.getStringExtra("What are these?"));
Log.i(TAG, String.valueOf(data.getIntExtra("How many pens?", -1)));
}
}
}
}
呼び出される側
public class WorkerActivity extends Activity{
final String TAG = "My";
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.work);
Log.i(TAG, "WorkerActivity");
Intent data;
data = new Intent();
data.putExtra("What are these?", "These are pens.");
data.putExtra("How many pens?", 3);
setResult(RESULT_OK, data);
finish();
}
}