Android之startActivityForResult
作用:当aAty跳转之bAty时,需要bAty回传数据,使用startActivityForResult。
相关的函数:
aAty:--跳转至bAty(intent可以传递数据)
void android.app.Activity.startActivityForResult(Intent intent, int requestCode)
bAty:
void android.app.Activity.setResult(int resultCode, Intent data)
aAty:
void android.app.Activity.startActivityForResult(Intent intent, int requestCode)
代码:
aAty:
public class MainActivity extends Activity implements OnClickListener { private Button bt_jumpAnotherAty; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bt_jumpAnotherAty = (Button) findViewById(R.id.bt_jumpAnotherAty); bt_jumpAnotherAty.setOnClickListener(this); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (resultCode) { case RESULT_OK: String result = data.getStringExtra("result"); Log.d("h_bl", result); break; default: break; } super.onActivityResult(requestCode, resultCode, data); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.bt_jumpAnotherAty: Intent intent = new Intent(MainActivity.this, AnotherActivity.class); startActivityForResult(intent, 0); break; default: break; } } }
bAty:
public class AnotherActivity extends Activity implements OnClickListener { private Button bt_setResult; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_another); bt_setResult = (Button) findViewById(R.id.bt_setResult); bt_setResult.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.bt_setResult: // 数据是使用Intent返回 Intent intent = new Intent(); // 把返回数据存入Intent intent.putExtra("result", "My name is h_bolin"); // 设置返回数据 AnotherActivity.this.setResult(RESULT_OK, intent); // 结束该Aty,这点很重要。 AnotherActivity.this.finish(); break; default: break; } } }
详解:bAty被销毁时 -- finish(),会返回数据。
PS.
1.一般不会在bAty的onCreate()方法写setResult()方法,需要在调用的时候,才会调用。
2.按Back键,Android会自动调用Aty的finish()方法。
3.可以重写onBackPressed()方法,对Back键的事件处理。
String result = data.getStringExtra("reslt");
4.取值时,要name要写对,不然会报以下错误:
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { (has extras) }} to activity {com.example.startactivityforresultdemo/com.example.startactivityforresultdemo.MainActivity}: java.lang.NullPointerException: println needs a message
startActivityForResult() 中requestCode 和 resultCode 的作用:
使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,我们需要为startActivityForResult()方法传入一个请求码(第二个参数)。请求码的值是根据业务需要由自已设定,用于标识请求来源。例如:一个Activity有两个按钮,点击这两个按钮都会打开同一个Activity,不管是那个按钮打开新Activity,当这个新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。
详见: