启动另外一个Activity,并返回结果
大致步骤:
1.启动另外一个Activity,这里称子Activity;
2.子Activity通过setResult方法设置返回结果,setResult方法带两个参数:结果码和表示为Intent的负载值;
3.父Activity通过onActivityResult方法处理子Activity返回的结果
让子Activity有返回值
使用startActivity方式启动的Activity和它的父Activity无关,当它关闭时也不会给父Activity提供任何反馈。
你可以启动一个Activity作为子Activity,它与父Activity有内在的联系。当子Activity关闭时,它会触发父Activity中的一个事件处理函数。子Activity最适合用在一个Activity为其它的Activity提供数据(例如用户从一个列表中选择一个项目)的场合。
子Activity的创建和普通Activity的创建相同,也必须在应用程序的manifest中注册。任何在manifest中注册的Activity都可以用作子Activity。
启动子Activity
startActivityForResult方法和startActivity方法工作很相似,但有一个很重要的差异。Intent都是用来决定启动哪个Activity,你还可以传入一个请求码。这个值将在后面用来作为有返回值Activity的唯一ID。
下面的代码显示了如何启动一个子Activity:
private static final int SHOW_SUBACTIVITY = 1;Intent intent = new Intent(this, MyOtherActivity.class);startActivityForResult(intent, SHOW_SUBACTIVITY);
private static final int PICK_CONTACT_SUBACTIVITY = 2;Uri uri = Uri.parse(“content://contacts/people”);Intent intent = new Intent(Intent.ACTION_PICK, uri);startActivityForResult(intent, PICK_CONTACT_SUBACTIVITY);
Button okButton = (Button) findViewById(R.id.ok_button);okButton.setOnClickListener(new View.OnClickListener() {public void onClick(View view) {Uri data = Uri.parse(“content://horses/” + selected_horse_id);Intent result = new Intent(null, data);result.putExtra(IS_INPUT_CORRECT, inputCorrect);result.putExtra(SELECTED_PISTOL, selectedPistol);setResult(RESULT_OK, result);finish();}});Button cancelButton = (Button) findViewById(R.id.cancel_button);cancelButton.setOnClickListener(new View.OnClickListener() {public void onClick(View view) {setResult(RESULT_CANCELED, null);finish();}});
private static final int SHOW_SUB_ACTIVITY_ONE = 1;private static final int SHOW_SUB_ACTIVITY_TWO = 2;@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);switch(requestCode) {case (SHOW_SUB_ACTIVITY_ONE) : {if (resultCode == Activity.RESULT_OK) {Uri horse = data.getData();boolean inputCorrect = data.getBooleanExtra(IS_INPUT_CORRECT, false);String selectedPistol = data.getStringExtra(SELECTED_PISTOL);}break;}case (SHOW_SUB_ACTIVITY_TWO) : {if (resultCode == Activity.RESULT_OK) {// TODO: Handle OK click.}break;}}}