现有MainActivity,当它进入到SecondActivity后,在SecondActivity中进行了某些操作然后需要将值返回给MainActivity时,
于是就可以用到onActivityResult() 这个方法了,下面呢,我就具体来介绍一下用法。
1、MainActivity里面的主要代码
(1)当需要返回值时,那么在启动另一个Activity时要用到startActivityForResult(intent, REQUEST_CODE);
注意第二个参数是请求的int类型的值,这个值要在onActivityResult()方法中和requestCode做判断的,
由此来判断是启动的某个Activity。
(2)onActivityResult()方法中的第二个参数就是SecondActivity传回来的键,
第三个参数就是SecondActivity传回来的键对应的值。
- final int RESULT_CODE=101;
- final int REQUEST_CODE=1;
- public void enterSecond(View view) {
- Intent intent=new Intent(this,SecondActivity.class);
- startActivityForResult(intent, REQUEST_CODE);
- }
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- Log.i(TAG, "onActivityResult"+"requestCode"+requestCode+"\n resultCode="+resultCode);
- if(requestCode==REQUEST_CODE) {
- if(resultCode==RESULT_CODE) {
- String result=data.getStringExtra("second");
- textView.setText(result);
- }
- }
- super.onActivityResult(requestCode, resultCode, data);
- }
2、SecondActivity 类中的代码:
这个里面的RESULT_CODE、intent分别跟上段代码中onActivityResult()方法中的第二个、第三个参数相对应。
- final int RESULT_CODE=101;
- public void closeButton(View view) {
- Intent intent=new Intent();
- intent.putExtra("second", "I am second!");
- setResult(RESULT_CODE, intent);
- finish();
- }
3、除此之外,onActivityResult()方法中的第二个参数resultCode还有系统自带的一些参数,也就是说,如果我们启动的intent是隐式意图,那么可以用Activity类中RESULT_OK来表示操作已经顺利结束。
例如,调用系统图库的返回,请看代码:
- final int CROP_PIC_REQUESTCODE = 23;
- final int SELECT_PICTURE = 21;
- if (resultCode == RESULT_OK && requestCode == SELECT_PICTURE) {
- System.out.println("调用图库返回,关闭activity");
- Intent intent1 = new Intent("com.android.camera.action.CROP");
- intent1.setDataAndType(data.getData(), "image/*");
- intent1.putExtra("crop", "true");
- intent1.putExtra("aspectX", 1);
- intent1.putExtra("aspectY", 1);
- intent1.putExtra("outputX", 80);
- intent1.putExtra("outputY", 80);
- intent1.putExtra("return-data", true);
- startActivityForResult(intent1, CROP_PIC_REQUESTCODE);
- }
当然,我们还可以看下源码中还有哪些类似RESULT_OK的。
- /** Standard activity result: operation canceled. */
- public static final int RESULT_CANCELED = 0;
- /** Standard activity result: operation succeeded. */
- public static final int RESULT_OK = -1;
- /** Start of user-defined activity results. */
- public static final int RESULT_FIRST_USER = 1;