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

无法调用Activity获取返回结果?从Dialog Activity取用户选择结果遇阻

从对话框Activity调用方法并返回结果问题排查与解决

目标

从另一个Activity(对话框)调用方法,并返回用户选择的结果

问题背景

已查阅大量跳转Activity相关文章及Stack Overflow错误帖,尝试约8种方案仍未解决问题。

当前问题

  1. 报错提示目标Activity未找到,错误截图如下:
    错误截图
  2. 检查清单文件未发现项目内任何Activity,不理解显式Activity类中的HEX部分含义。
  3. 执行以下代码仍触发相同错误:
Intent intent;
        
if (item is Ph)
{ 
    intent = new Intent(this, typeof(CveActivity));
    intent.PutExtraMItem(item);
    StartActivityForResult(intent, PH_REQUEST_CODE);
}

已尝试方案

  • 使用StartActivity
  • 使用StartActivityForResult
  • 直接调用该Activity的方法
  • 实例化对象并调用该Activity/类的方法
  • 确认该Activity已存在于CSPROJ文件中

解决方案

1. 确保Activity被正确注册

Xamarin.Android中Activity需通过特性或手动注册才能被系统识别:

  • 特性自动注册:在CveActivity类上方添加[Activity]特性,Xamarin会自动将其注册到清单文件:
[Activity(Label = "CveActivity")]
public class CveActivity : Activity
{
    // 类实现代码
}
  • 手动注册:若自动注册失效,直接在AndroidManifest.xml的<application>标签内添加注册代码:
<activity android:name="你的项目命名空间.CveActivity" />

替换你的项目命名空间为实际的代码命名空间。

2. 关于HEX标识的说明

报错中的HEX值是系统找不到目标Activity时生成的临时标识,本质就是目标Activity未被系统识别到,解决注册问题后该标识会消失。

3. 正确实现结果返回逻辑

要返回用户选择的结果,需在CveActivity中设置返回数据并关闭页面:

// 用户完成选择后执行
Intent resultIntent = new Intent();
// 替换为实际返回的数据,支持多种类型的Extra
resultIntent.PutExtra("selected_result", "用户选择内容");
SetResult(Result.Ok, resultIntent);
Finish();

在调用方Activity中重写OnActivityResult方法接收结果:

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
    base.OnActivityResult(requestCode, resultCode, data);
    if (requestCode == PH_REQUEST_CODE && resultCode == Result.Ok)
    {
        var selectedResult = data.GetStringExtra("selected_result");
        // 处理返回的结果数据
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 12:17:18