You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin Android注册Activity Result回调及无法重写OnActivityResult问题

无法重写OnActivityResult的原因及解决方案

核心原因

  • 方法签名不匹配:Xamarin.Android 中OnActivityResult的官方签名和Java原生存在差异,很多开发者误将第二个参数Result枚举写为int类型,或参数顺序错误,导致IDE无法识别为重写方法。
  • 类继承错误:仅Android.App.Activity及其子类(如AppCompatActivity)可以重写该方法,若你编写代码的类是Fragment、普通工具类等,自然无法找到该重写项。
  • 命名空间缺失:未引入Android.App、Android.Content等必要命名空间,IDE无法识别基类方法定义。

解决步骤

  1. 确认代码所属类继承自Activity类,示例类定义如下:
[Activity(Label = "@string/app_name")]
public class MainActivity : AppCompatActivity
{
    // 其他业务逻辑
}
  1. 手动输入正确的方法签名,无需等IDE自动提示:
protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)
{
    base.OnActivityResult(requestCode, resultCode, data);
    if (requestCode == 899 && resultCode == Result.Ok && data != null)
    {
        // 获取选中图片的Uri
        Android.Net.Uri imageUri = data.Data;
        // 直接赋值给ImageView展示即可
        yourImageView.SetImageURI(imageUri);
    }
}
  1. 若仍无提示,检查文件顶部是否引入了必要命名空间:
using Android.App;
using Android.Content;
using Android.OS;
using Android.Widget;
using AndroidX.AppCompat.App;

替代方案(官方推荐)

高版本Android官方已推荐使用Activity Result API替代已废弃的StartActivityForResult方法,无需重写OnActivityResult,使用更安全不易出错:

// 声明图片选择回调
private ActivityResultLauncher<string> pickImageLauncher;
protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    // 初始化回调逻辑
    pickImageLauncher = RegisterForActivityResult(new ActivityResultContracts.GetContent(), uri =>
    {
        if (uri != null)
        {
            yourImageView.SetImageURI(uri);
        }
    });
}
// 触发图片选择
private void TextView_Click(object sender, EventArgs e)
{
    pickImageLauncher.Launch("image/*");
}

内容的提问来源于stack exchange,提问作者user16612111

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:15:06