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。如果这对您有帮助,请您标记它并投票,谢谢