首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

是否需要在onActivityResult()中使用super.onActivityResult()?

onActivityResult() 是 Android 中用于处理从其他活动(Activity)返回结果的方法。当一个活动启动另一个活动并期望得到结果时,通常会使用 startActivityForResult() 方法。被启动的活动在完成其任务后,会调用 setResult() 方法来设置结果,并通过 finish() 方法返回到启动它的活动。这时,启动活动的 onActivityResult() 方法会被调用。

基础概念

onActivityResult() 方法的定义如下:

代码语言:txt
复制
protected void onActivityResult(int requestCode, int resultCode, Intent data)
  • requestCode:请求码,用于标识启动活动的请求。
  • resultCode:结果码,用于标识活动的结果状态。
  • data:返回的数据,通常是一个 Intent 对象。

是否需要使用 super.onActivityResult()

在大多数情况下,不需要onActivityResult() 中显式调用 super.onActivityResult()。因为 onActivityResult() 是一个空方法,调用 super.onActivityResult() 不会执行任何操作。

然而,有些情况下,父类可能重写了 onActivityResult() 方法并添加了一些逻辑。如果你的子类也需要这些逻辑,那么你应该调用 super.onActivityResult()

示例代码

假设父类有一个简单的 onActivityResult() 实现:

代码语言:txt
复制
public class ParentActivity extends AppCompatActivity {
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // 一些通用的处理逻辑
        Log.d("ParentActivity", "onActivityResult called");
    }
}

子类可以这样实现:

代码语言:txt
复制
public class ChildActivity extends ParentActivity {
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data); // 调用父类的方法
        // 子类特定的处理逻辑
        if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
            // 处理返回的数据
        }
    }
}

应用场景

onActivityResult() 常用于以下场景:

  1. 图片选择:用户从图库选择图片后,返回到应用并处理图片。
  2. 权限请求:请求某些敏感权限后,根据用户的响应进行处理。
  3. 数据输入:用户在其他活动中输入数据后,返回到应用并处理这些数据。

常见问题及解决方法

  1. 未调用 setResult():如果在启动的活动中没有调用 setResult(),那么 onActivityResult() 中的 data 将为 null
  2. 请求码和结果码不匹配:确保在 onActivityResult() 中检查的请求码和结果码与 startActivityForResult() 中设置的值匹配。
  3. 生命周期问题:如果活动在 onActivityResult() 被调用之前被销毁,可能会导致问题。确保活动的生命周期管理正确。

参考链接

希望这些信息对你有所帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Fragment调用startActivityForResult的那些坑

这里2和3的前提是如果父activity重写了onActivityResult,父Activity的onActivityResult必须添加super.onActivityResult() 总结起来就是...super.onActivityResult(requestCode, resultCode, data); } 从上面的方法可以看出FragmentActivityonActivityResult...这里就有一个问题需要注意了,我们一般都会覆写父ActivityonActivityResult方法,这个时候我们必须在onActivityResult方法加上super.onActivityResult...方法没有调用super.onActivityResult()方法而导致Fragment死活接收不到onActivityResult的回调。...直接在Fragment调用startActivityForResult方法 2.如果父Activity覆写了onActivityResult,则需要确保调用了super.onActivityResult

2K10
  • Android使用Intent隐式实现页面跳转

    在上一篇文章我介绍了使用Intent显式来实现页面向下跳转,接下来这篇文章主要介绍的是使用Intent隐式来实现向上跳转,什么意思呢,就是当我们从第一个页面跳转到第二个页面的时候我们可以从第二个页面跳转回去...(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode,...由于我们使用的startActivityForResult()方法启动FIrstActivity的,所以我们需要在FIrstActivity被销毁之后回调上一个活动的onACtivityResult()...方法,因此我们需要在MainActivity写这个方法来得到返回的数据 package com.example.testintent; import android.content.Intent;...(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode,

    1K21

    Android使用友盟集成QQ、微信、微博等第三方分享与登录方法详解

    2、将debug.keystore文件拷贝到项目的app目录下(对应app build相应的位置),目的是为了使用友盟的签名,如图: ?...即在包名目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity 2,QQ与新浪微博的回调: QQ与新浪不需要添加Activity,但需要在使用...QQ分享或者授权的Activity添加如下代码: (注意onActivityResult不可在fragment实现,如果在fragment调用登录或分享,需要在fragment依赖的Activity...实现) @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult...(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data

    2.2K40

    Android6.0动态权限适配&XMPermissions

    (intrequestCode, intresultCode, Intent data){ super.onActivityResult(requestCode, resultCode, data...(intrequestCode, intresultCode, Intent data){ super.onActivityResult(requestCode, resultCode, data...true 2、曾经被拒绝过权限且不再询问后再调用:false 3、系统不允许任何程序获取该权限:false 4、查看源码得知安卓6.0以下返回:false 5、总是允许权限后再次调用:false 在APP使用过程...,从设置更改权限 如果应用程序的某个业务逻辑需要使用权限,但用户没有选择开启。...XMPermissions 导读 如果我们应用需要动态申请危险权限,按照Google官方问档我们需要在activity或者fragment的onRequestPermissionsResult方法进行回调处理

    1.3K20

    使用友盟分享和登陆以及使用时要注意的坑

    一、友盟分享的使用 二、友盟登陆的使用 三、友盟分享组件90%常见问题汇总 ** 因为官网论坛每一条都要点个链接进去,好麻烦,我就集中在这篇博客里面了,方便查看。...void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode...QQ/Qzone分享成功但没有接收到消息 1.分享内容包含敏感词汇,如红包等,切换其他分享文本测试 2.QZONE由于多次分享同一内容,可能会被过滤掉 6....QQ没有回调 如果QQ分享或授权没有回调,需要检查是否在进行分享操作的Activity中加入以下代码: @Override protected void onActivityResult...(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode

    1.8K10

    Android6.0蓝牙开发获取附近低功耗蓝牙设备结果权限问题分析

    因为Android6.0的一些权限需要在代码动态申请 ii>,于是需要在代码动态申请所需要的权限 //Android6.0需要动态申请权限 if (ContextCompat.checkSelfPermission...,允许权限之后发现,虽然不再报异常,但依旧刷新不出来结果(如果你的位置信息功能是开启的则就另说了,具体原因看第三条分析) iii>,你目前只是有了使用设备的位置信息的权限,但是你还没有打开位置信息,所以就算有了权限也没办法使用...你可以验证一下---- 验证不需要在代码验证,你在做完第二步并且同意了访问位置信息的权限后,打开手机的位置信息功能。...并且在该activity重写onActivityResult方法,在位置开启成功后去申请权限,当然除了在代码申请在清单配置文件也是需要写的,如果未开启位置信息则进行其他处理 @Override...else { //若未开启位置信息功能,则退出该应用 finish(); } } super.onActivityResult

    1.6K100
    领券