Android Intent startActivityForResult的练习
场景示例:
主Activity,有着很多子界面功能模块,首先从主界面传递某个数据去到子界面,子界面关闭的时候需要把某个返回数据返回到主界面。
这样的情况下数据交互,就可以用到onActivityResult.
功能参数:
1. startActivityForResult(Intent intent, int requestCode);
intent 参数: 一个intent对象。
requestCode参数: 一个标识码,用来给你要传递的子Activity做为标识,当子Activity结果时requestCode将返回到onActivityResult()中。以方便确定是从哪个子Activity中返回过来的。
2. onActivityResult(int requestCode , int resultCode ,Intent data);
requestCode参数:这个整数返回给主onActivity作为标识,确认返回的数据是从哪个子activity中返回的。
resultCode参数:这个是由子Activity通过setResult()方法返回。主Activity根据此来判断是否由子Activity返回。
data参数:一个intent.
3. setResult(int resultCode, intent data)
resultCode参数:当Activity结束时,resultCode将传递到主Activity的onActivityResult()中。
data参数:intent对象,返回给主Activity的数据。
示例代码:
主Activity。
private final int REQUESTCODE = 1; //定义一个常量用来做为requestCode
传递:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
Intent intent = new Intent().setClass(MainActivity.this,Other.class); int a = Integer.parseInt(one.getText().toString()); int b = Integer.parseInt(two.getText().toString()); /*new一个Bundle对象,并将要传递的数据传入*/ Bundle bundle = new Bundle(); bundle.putInt("one",a); bundle.putInt("two",b); /*将Bundle对象传递给Intent*/ intent.putExtras(bundle); // startActivity(intent); startActivityForResult(intent, REQUESTCODE);
onActivityResult
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (resultCode) { case RESULT_OK: int three2 = data.getIntExtra("three", 0); result_ok.setText(String.valueOf(three2)); break; default: break; } }
子Activity,Other
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
Intent it = new Intent(); int three = Integer.parseInt(result.getText().toString()); it.putExtra("three", three); setResult(RESULT_OK, it); finish();