安卓 onActivityResult获取返回值

情景: Activity 1 启动Activity 2, 想要获取Activity2中的值返回给Activity1.
也就是三个步骤:

  1. Activity 1 启动Activity 2
  2. Activity 2 中给 Activity 1传值
  3. Activity 1 用onActivityResult获取返回值。

onActivityResult获取返回值有两种情况:

  • Intent是显式(同一个应用内部的Activity之间切换)
  • Intent是隐式(调取应用之外的活动等,比如发短信/打电话/发邮件等)

可以参考之前的笔记:https://www.jianshu.com/p/74441a115b42

对于显式Intent

我们知道,通常Activity A启动Activity B使用以下方法(不要返回值):
(Activity A中)

 public void toSecond(View view) {
        Intent intent=new Intent(this,SecondActivity.class);
        startActivityForResult(intent);
    }

那么要想得到SecondActivity的返回值应该怎么做呢?
(Activity A中):

 final int RESULT_CODE=101;
 final int REQUEST_CODE=1;

 public void toSecond(View view) {
        Intent intent=new Intent(this,SecondActivity.class);
        startActivityForResult(intent, REQUEST_CODE);
    }

然后需要重写onActivityResult(int requestCode, int resultCode, Intent data) 方法, 其中:

  • requestCode 是用于标识所启动的Activity的唯一标识符,和上面的REQUEST_CODE是同一个值,在onActivityResult方法中要与REQUEST_CODE进行比较以判断返回的是不是该Activity;
  • resultCode是结果编号,Activity B 返回的键 (在显式Intent中,该值= REQUEST_CODE);
  • data 就是所接受到的返回的值:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if(requestCode==REQUEST_CODE) {
            if(resultCode==RESULT_CODE) {
                String result=data.getStringExtra("second");
             textView.setText(result);
            }
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

(Activity B中)
这个里面的RESULT_CODE、intent分别跟上段代码中onActivityResult()方法中的第二个、第三个参数相对应。

  • RESULT_CODE 用户告诉对方自己的唯一标识符
  • intent 用于发送内容
final int RESULT_CODE=101;
public void sendToFirstActivty(View view) {
    Intent intent=new Intent();
    intent.putExtra("second", "I am second!");
    setResult(RESULT_CODE, intent);
    finish();
}

对于隐式Intent

对于隐式Intent来说,调用的不是自己内部指定的Activity,处理方法中,只有一个区别: requestCode还有系统自带的一些参数:表示成功获得。也就是说,如果我们启动的intent是隐式意图,那么可以用Activity类中RESULT_OK来表示操作已经顺利结束。 (此处,requestCode = RESULT_OK)
借用网上例子:

final int CROP_PIC_REQUESTCODE = 23;
final int SELECT_PICTURE = 21;
if ( requestCode == SELECT_PICTURE && resultCode == RESULT_OK) {
            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);
        }

其他判断操作状态的标识符还有:

/** 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;

参考:https://blog.csdn.net/qq_29134495/article/details/51505278

    原文作者:Reinelili
    原文地址: https://www.jianshu.com/p/559d77beb57c
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞