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

MainActivity.OnActivityResult(int,Result,Intent)':在Xamrine中找不到要重写的合适方法

MainActivity.OnActivityResult(int, Result, Intent) 方法是 Android 开发中的一个回调方法,用于处理从其他活动(Activity)返回的结果。这个方法在较新的 Android 版本中已经被弃用,取而代之的是使用 registerForActivityResult API。

基础概念

OnActivityResult 是 Android 中的一个生命周期方法,当启动的子活动(通过 startActivityForResult 方法)返回结果时,会调用这个方法。它包含三个参数:

  • requestCode:请求码,用于标识请求的来源。
  • resultCode:结果码,表示子活动的执行结果。
  • data:返回的数据,通常是一个 Intent 对象。

为什么在 Xamarin 中找不到要重写的合适方法

在 Xamarin.Android 中,OnActivityResult 方法可能没有正确地被识别或重写,这通常是因为:

  1. 方法签名不匹配:确保方法签名与 Xamarin.Android 的要求完全一致。
  2. 目标框架版本:确保你的项目目标框架版本支持 OnActivityResult 方法。
  3. Xamarin 版本:确保你使用的 Xamarin 版本是最新的,或者至少是兼容的。

解决方法

由于 OnActivityResult 已经被弃用,推荐使用 registerForActivityResult API。以下是如何在 Xamarin.Android 中使用 registerForActivityResult 的示例:

代码语言:txt
复制
using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.OS;
using Android.Widget;
using androidx.activity.result;
using androidx.appcompat.app.AppCompatActivity;

namespace YourNamespace
{
    [Activity(Label = "MainActivity")]
    public class MainActivity : AppCompatActivity
    {
        private ActivityResultLauncher<Intent> activityResultLauncher;

        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.activity_main);

            activityResultLauncher = RegisterForActivityResult(
                new ActivityResultContracts.StartActivityForResult(),
                result =>
                {
                    if (result.ResultCode == Result.Ok)
                    {
                        Intent data = result.Data;
                        // 处理返回的数据
                    }
                });

            Button button = FindViewById<Button>(Resource.Id.button);
            button.Click += (sender, e) =>
            {
                Intent intent = new Intent(this, typeof(SecondActivity));
                activityResultLauncher.Launch(intent);
            };
        }
    }
}

参考链接

通过这种方式,你可以更现代、更简洁地处理活动间的结果传递。

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

相关·内容

  • startActivityForResult的坑

    android中经常会遇到从当前的Activity跳转到另外一个Activity的情况,通常情况下我们会直接选择用startActivity或者startActivityForResult。如果你对这两个方法还不知道的话可以去https://www.cnblogs.com/fuck1/p/5456337.html看看。本文不会告诉你怎么使用这个方法,而是会说说笔者自己遇到的问题以及解决办法。 事情的起因是我在项目中遇到这样一个问题就是要求从下一个界面传数据回来,当时第一反应是用startActivityForResult解决,当我把代码敲完过后一测试,我擦咧,结果没回来。我以为是我代码写错了(这段代码很简单怎么可能会错)最后找到答案是因为Activity的启动模式被这只成了singleTask。好吧,这个有点坑自己了。于是我就自己测试了四种不同模式下启动模式对该方法的影响,(如果你对Activity的四种启动模式还不是很了解可以到https://blog.csdn.net/qq994467433/article/details/83350698看看)结果还真的挺有意思的。话不多说上代码。

    02

    Android开发笔记(四十)组件通讯工具Intent

    Intent用于处理Android各组件之间的通讯。Intent完成的工作主要有三部分: 1、Intent需标明本次通讯请求是从哪里来,到哪里去,要怎么走; 2、发起方携带上本次通讯需要的数据内容,接收方则对收到的Intent数据进行解包; 3、如发起方要求判断接收方的处理结果,Intent还需负责传回应答的数据内容; Intent由以下部分组成: Component : 组件,用于指定Intent的来源与目的 Action : 用于指定Intent的动作 Data(即Uri) :  用于指定动作要操纵的数据路径 Category : 用于指定动作的类别 Type : 数据类型,用于指定Data类型的定义 Extras : 扩展信息,用于指定装载的参数信息 Flags : 标志位,用于指定Intent的运行模式(也叫启动标志)。详细说明见上一节的《Android开发笔记(三十九)Activity的生命周期》。

    03
    领券