首页
学习
活动
专区
工具
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);
            };
        }
    }
}

参考链接

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

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

相关·内容

让 Android 的 WebView 支持 type 为 file 的 input,同时支持拍照

目标对象:WebChromeClient 实例化一个目标对象,并重写它的几个隐藏方法(针对不同的Android系统版本,方法名和入参都不一样,所以方法有多个),然后将目标对象作为参数传递给 WebView...    1、所有被重写的方法最后都会调用 selPic 方法,这个方法会显示一个对话框,让用户选择是拍照选取照片还是直接从已保存的文件中选取图片。    ...用于在 onActivityResult 方法中识别出是执行了拍照选取的流程。...方法中识别出是执行了从已保存文件中选取图片文件的流程。.../** * 解决拍照后在相册中找不到的问题 */ private void addImageGallery(String path) { if (null == path || "".equals

1.6K20

Android-使用Intent传递数据

Intent中取值, 第二个参数是要传递的数据。...返回数据给上一个活动 Activity中还有一个StartActivityForResult()方法也是用于启动活动的, 但这个方法期望在活动被销毁的时候能够返回一个结果给上一个活动。...(); 还是构建了一个Intent,不过这个Intent仅仅用于传递数据而已, 没有指定任何“意图”,把要传递的数据存放在Intent中,调用setResult()方法, 专门用于向上一个活动返回数据的...由于使用的是startActivityForResult()方法启动的SecondActivity的, 在被销毁之后会回调上一个活动的onActivityResult()方法,因此需要重写这个方法:...如果在SecondActivity中不是通过按钮点击返回的,而是按下Back键, 可以在SecondActivity中重写onBackPressed()方法解决问题: @Override public

1.2K30
  • Android startActivityForResult用法

    二、示例 1、使用系统提供的startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,为了得到传回的数据,必须在Activity...中重写onActivityResult(int requestCode, int resultCode, Intent data)方法用来接收返回数据: public class MainActivity...intent, int requestCode)方法打开新的Activity,新Activity关闭前需要向前面的Activity返回数据需要使用系统提供的setResult(int resultCode...我们只需重写onActivityResult(int requestCode, int resultCode, Intent data)方法,根据请求码和返回码进行判断,然后进行相应的处理。...我们一般使用setResult(RESULT_OK, intent);将我们的返回码设置为RESULT_OK = -1,这样可以避免无用的判断 注意:在Fragment中使用startActivityForResult

    40420

    优雅的监听onActivityResult

    一、思考 当Activity A启动一个Activity B后,B finish,我们可能需要处理B返回的值,此时,我们可能就需要用到了onActivityResult,需要在Activity A中重写实现...当然,在这种前提是我们处理逻辑都是放在Activity A类中,那么假如我们是在一个其他类,不是Activity或者Fragment的情况呢?...当我看到Google的开源的lifecycle库中的HolderFragment的做法,感觉眼前一亮。在Activity或者Fragment中添加一个空壳的Fragment,作为一个生命周期的监听。...(int resultCode, Intent data) { // to handle result.... } }); [image.png] 四、结合Rxjava 可能需求逻辑会比较复杂,可能需要连续的处理...在以上实现的基础上,在ListenActivityResultRequest增加一个返回Observable的方法。

    2.2K70

    Android开发笔记(一百六十六)H5通过WebView录像上传

    与拍照上传一样,摄像上传也要重写WebChromeClient的openFileChooser/onShowFileChooser方法,在这两个方法内部跳转到系统的摄像机页面,示例代码如下:    ...intent, VIDEO_REQUEST);     } 在摄像机页面录像结束,返回到上一页时回调onActivityResult方法,所以需要重写上个页面的onActivityResult方法,在该方法中把摄像结果传给...下面是回传视频的处理代码:     @Override     protected void onActivityResult(int requestCode, int resultCode, Intent...= RESULT_OK ?...点击占位图标上的三角符号,则网页开始播放已上传的摄像视频,下面的图片正是播放过程中的截图: ? 点此查看Android开发笔记的完整目录

    1.4K20

    (转载非原创)Android系统编程入门系列之界面Activity交互响应

    在视图中重写界面响应的三个方法后,如果返回的结果为true,则上文界面响应中的三个方法将不会被回调。 为什么需要封装一层响应方法呢?...在经历了事件分发和事件处理之后,这样的一个事件传递机制就算完成了。而上文提到的每一个事件,都是如此。 上述过程在代码中的实现,只需要针对事件分发、事件拦截和事件处理分别定义一个可重写的方法即可。...能够重写该方法的位置主要是android.app.Acitivty和android.view.View中,由于事件拦截只会发生在子视图的传递过程中,在界面中并不需要,所以事件拦截对应的方法只在android.view.GroupView...,系统会调用当前界面Activity中的onActivityResult(int requestCode, int resultCode, Intent data)方法,因此可以重写该方法。...所以可以重写onBackPressed()方法,在该方法中调用setResult(int resultCode, Intent data)设置上文提到的返回时参数。

    42700

    小白也能看懂的插件化DroidPlugin原理(三)-- 如何拦截startActivity方法

    经过了前面两篇文章的铺垫,终于可以玩点真刀实弹的了,本篇将会通过 Hook 掉 startActivity 方法的一个小例子来介绍如何找出合适的 Hook 切入点。 ...接下来的任务将变得非常简单,回忆一下上一篇博文《小白也能看懂插件化DroidPlugin原理(二)-- 反射机制和Hook入门》中的方案一,在替换汽车引擎时我们继承原来的汽车引擎类创建了一个新类,然后在新引擎类中拦截了最大速度的方法...方法的调用如果放到  MainActivity 的 attachBaseContext(...) 方法中替换工作将不会生效,为什么? 调试发现,我们在 attachBaseContext(..)...,而一个应用中只有一个主线程,并且由源码可知,ActivityTreadd 的对象又是以静态变量的形式存在的,太好了,这正是我们要找的 Hook 点。...() 方法,而 ActivityTread 在程序中是以单例的形式存在的,这就是原因。

    1.1K60

    Tinker-自定义扩展与流程分析(下)

    前言 上一篇我们讲解了Tinker的使用,现在我们讲解下一些功能的扩展与从源码角度查看流程分析。 ---- 功能扩展 在扩展功能之前我们要先来了解下。我们可以扩展那些功能。...其他的代码不变,重新走一遍流程。就会看到效果的生成 ---- 多渠道打包修复 还记得我们在第一篇中我们将所有关于多渠道打包的代码都注释了,现在我们将注释的代码放开,然后按照步骤。...下面我们就来看下这个接口的实现类。还记得我们在参数中传入的DefaultPatchListener吗?这个就是实现这个方法的类。...我们可以重写这个方法,去实现我们自己的校验,比如MD5检验等 也可以重写ShareConstants来实现我们自己的错误码 protected int patchCheck(String path...相信大家对他们的差别也有了一定的认识。Tinker在使用中感觉还是有不少坑的,但是相对于AndFix,Tinker支持的比较全,并且支持在微信上也在使用。

    77610

    滴滴插件化框架VirtualAPK原理解析(一)之插件Activity管理

    ,暂时骗过系统;然后到合适的时候又替换回我们需要启动的真正的Activity;我们打开Virtualapk的Library,查看清单文件中,声明了各种启动模式的Activity 在合适的时候把这个假的替换成我们真正需要启动的Activity 我们可以先启动一个已经在AndroidManifest.xml...,VAInstrumentation 里面重写了execStartActivity,realExecStartActivity等方法,为什么要重写这些方法?...我们前面说过,要进行偷梁换柱,而这个地方就是在execStartActivity的以下的代码中 if (intent.getComponent() !...的名字存储到intent中,接着通过dispatchStubActivity方法,根据要启动的TargetActivity是什么启动模式的来启动相应的代理StubActivity private void

    1.1K20

    《移动互联网技术》第八章 消息与服务:掌握不同类型广播监听方式,以及创建通知的方法

    ,是自定义的接收器MyBroadcastReceiver,同样要重写onReceive 函数。...Handler的异步消息处理流程如下: a) 在主线程中创建一个Handler对象,并重写handleMessage()方法; b) 子线程需要进行UI操作时,创建一个Message对象,并通过Handler...AsyncTask的泛型参数指示异步任务中各种参数的类型,这些参数包括:Params表示给后台任务传递的参数;Progress是当前任务的执行进度,可以在界面上显示;Result指示任务完成后返回的结果...Intent是立即执行某个动作,PendingIntent是延迟执行,它更加倾向于在某个合适的时机去执行某个动作。...只需要继承IntentService类,并且重写onHandleIntent 函数;在onHandleIntent中处理耗时的任务,就不用担心 ANR问题,因为这个函数本身就在子线程中运行。

    10510

    Android基础总结(2)——活动Activity

    一般在重写的onCreate(Bundle savedInstanceState)方法中用setContentView(R.layout.activity_main)方法来给当前活动加载一个布局,在setContentView.../menu目录下创建相关菜单的xml文件, 然后在对应的Activity中先重写 onCreateOptionsMenu(Menu menu)方法创建菜单,在该方法中通过getMenuInflater(...我们需要重写 onOptionsItemSelected(MenuItem item) 方法,在该方法中定义点击不同的菜单选项的响应效果。...()方法来启动费另一个活动,该方法接收两个参数,第一个是Intent,第二个是请求码,用于在之后的回调中判断数据的来源,该请求码只要是一个唯一值就可以了。...}); SecondActivity被销毁之后会回调上一个活动的onActivityResult()方法,因此我们还需要在第一个活动中重写onActivityResult()方法,在该方法中我们对返回的数据和结果进行处理

    1.2K90

    当Activity跳转偶遇单身多年的老汉

    在项目中,Activity多重跳转一直是开发中最常见的问题,网上的解决方案很多,但是要怎么解决才是最佳的往往才是头疼的问题,我现在要讲的是如何真正的解决这个问题而不留一丝Bug,先介绍几种已有的方案以及优缺点...我想大家的第一眼感觉是和我一样的,这是神马?我难道要重写那么多个? 遇到这种问题,一般菜鸟抱大腿的流程: 菜鸟:遇到不会的问题怎么办? 老鸟:不会百度啊!百度不会吗? 菜鸟:百度不行怎么办?...从这里看到 startActivityForResult 两个方法,参数短的方法还是调用了参数长的方法,这里我们只需要重写那个参数长的方法即可,那我们不能用刚刚那种方式了,把 startActivity...这个问题解决也很简单,在 BaseActivity 预留一个方法,子类可以重写这个方法来决定是否要检查和判断 Activity 多重跳转的问题: public abstract class BaseActivity...首先要想知道重复跳转的 Activity 是不是同一个,我们可以通过 Intent 这个对象来进行判断,不过在此之前我们要先复习一下 Activity 的启动方式 显式意图启动 构造方法:new Intent

    42220

    从0系统学Android-2.6Activity间数据传递

    Intent 中提供了许多的 putExtra() 方法。可以将数据暂时存在 Intent 中,启动了另一个 Activity 后,只需要把数据从 Intent 中取出来就可以了。..."data"); startActivity(intent); 然后我们就可以在 SeconActivity 中取传递过来的数据了 Intent intent = getIntent(); String...但是这个方法期望在 Activity 销毁的时候能够返回一个结果给上一个 Activity 代码: Intent intent = new Intent(FirstActivity.this,SecondActivity.class...有两个参数,第一个是 返回码(一般用 RESULT_OK 或者 RESULT_CANCELED 就可以了,也可以自己定义),第二个参数就是带有数据的 Intent。...然后在返回的 Activity 中重写下面的方法 @Override protected void onActivityResult(int requestCode,int resultCode,Intent

    40320
    领券