首页
学习
活动
专区
工具
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() 被调用之前被销毁,可能会导致问题。确保活动的生命周期管理正确。

参考链接

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

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

相关·内容

领券