无法调用Activity获取返回结果?从Dialog Activity取用户选择结果遇阻
从对话框Activity调用方法并返回结果问题排查与解决
目标
从另一个Activity(对话框)调用方法,并返回用户选择的结果
问题背景
已查阅大量跳转Activity相关文章及Stack Overflow错误帖,尝试约8种方案仍未解决问题。
当前问题
- 报错提示目标Activity未找到,错误截图如下:

- 检查清单文件未发现项目内任何Activity,不理解显式Activity类中的HEX部分含义。
- 执行以下代码仍触发相同错误:
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
相关产品推荐
相关产品推荐

