C# 重写同一函数两次

C# 重写同一函数两次,c#,android,xamarin,C#,Android,Xamarin,为了在运行时请求权限,我使用RequestPermissions函数 我使用了两次RequestPermissions功能。一次在片段中(void Android.Support.V4.App.fragment.RequestPermissions),一次在主活动中(void activity.RequestPermissions) 为了做到这一点,我两次重写了OnRequestPermissionsResult函数-看起来void Android.Support.V4.App.Fragment

为了在运行时请求权限,我使用
RequestPermissions
函数

我使用了两次
RequestPermissions
功能。一次在片段中(
void Android.Support.V4.App.fragment.RequestPermissions
),一次在主活动中(
void activity.RequestPermissions

为了做到这一点,我两次重写了
OnRequestPermissionsResult
函数-看起来
void Android.Support.V4.App.Fragment.RequestPermissions
在结束时实际上变成了
void MainActivity.OnRequestPermissionsResult
。我如何使用另一个OnRequestPermissionsResult

主要的问题是,当重写同一个函数两次时会发生什么?哪个版本适用?OnRequestPermissionsResult
是我的问题,这里是一个例子,但我想它属于一个更大的问题


另一种提问方式是如何确定完成后将调用哪个函数
RequestPermissions

在父活动中,我有一个
OnRequestPermissionsResult
方法

 public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
    {
        Toast.MakeText(this, "Activity", ToastLength.Short).Show();
        base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    }
然后在fragment中,我使用一个按钮单击并调用以请求权限:

button.Click += delegate
   {
     RequestPermissions(new string[] { Manifest.Permission.Camera }, 0);
   };
并且在片段中还有一个
OnRequestPermissionsResult
方法:

 public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
    {
        Toast.MakeText(Activity, "Fragment", ToastLength.Short).Show();
        base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    }

最后,回调将输入activity的
OnRequestPermissionsResult
,然后输入fragment的
OnRequestPermissionsResult
,以便您可以自定义
requestCode
,以区分请求的哪一方。

C#还是Java?我假设你没有在这个问题上同时使用这两种方法。.C#@Brootswaymbi在你的片段中,你如何请求权限?
ActivityCompat.RequestPermissions()
或直接使用
RequestPermissions()
?@LeoZhu MSFT,如前所述,
Android.Support.V4.App.Fragment.RequestPermissions
你能显示你的
RequestPermissions
OnRequestPermissionsResult
代码吗?我测试,我可以在活动的
OnRequestPermissionsResult
和Fragment的
OnRequestPermissionsResult
中得到回调,但问题是,哪个代码将首先执行?
base.OnRequestPermissionsResult
的目的是什么?这是一样的!它首先调用父活动的
OnRequestPermissionsResult
,然后调用片段和base.OnRequestPermissionsResult默认解决了我的问题,非常感谢。我仍然不明白为什么
会以
为基础。在
活动的实施中,OnRequestPermissionsResult
将导致
片段的实施。我认为
base
调用父类而不是派生类..您只需在活动中添加base.OnRequestPermissionsResult,它将继续调用片段的OnRequestPermissionsResult。如果这对您有帮助,请您标记它并投票,谢谢