前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android onActivityResult获取返回值的用法

Android onActivityResult获取返回值的用法

作者头像
用户8099761
发布2023-05-10 19:55:39
1.1K0
发布2023-05-10 19:55:39
举报
文章被收录于专栏:私人订制私人订制

现有 MainActivity,当它进入到 SecondActivity 后,在 SecondActivity 中进行了某些操作然后需要将值返回给 MainActivity 时,就需要用到 onActivityResult() 这个方法了,下面呢,我就具体来介绍一下用法。

不过在这之前,先讲一下intent的用法:

对于intent主要的分类主要包括隐式意图和显式意图。显式意图通常主要是启动本应用中的Activity之间的数据,而隐式意图则常见于启动系统中的某些特定的动作,比如打电话,或者是跨应用的Activity启动。

一般来说:

显式意图:调用 Intent.setComponent() 或 Intent.setClass() 方法明确指定了组件名的 Intent 为显式意图,显式意图明确指定了 Intent 应该传递给哪个组件。

隐式意图:没有明确指定组件名的 Intent 为隐式意图。 Android 系统会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处理这个意图。

MainActivity里面的主要代码

(1)当需要返回值时,那么在启动另一个Activity时要用到startActivityForResult(intent, REQUEST_CODE);

注意第二个参数是请求的int类型的值,这个值要在onActivityResult()方法中和requestCode做判断的,由此来判断是启动的某个Activity。

(2)onActivityResult()方法中的第二个参数就是SecondActivity传回来的键,第三个参数就是SecondActivity传回来的键对应的值。

代码语言:javascript
复制
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);  
}  

SecondActivity 类中的代码:

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

代码语言:javascript
复制
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();  
}  

补充说明

onActivityResult() 方法中的第二个参数 resultCode 还有系统自带的一些参数,也就是说,如果我们启动的 intent 是隐式意图,那么可以用 Activity 类中 RESULT_OK 来表示操作已经顺利结束。

例如,调用系统图库的返回,请看代码:

代码语言:javascript
复制
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 的。

代码语言:javascript
复制
/** 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;  
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-9-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档