Xamarin.forms 加载页面时,Xamarin Forms:onAppearing()未触发

Xamarin.forms 加载页面时,Xamarin Forms:onAppearing()未触发,xamarin.forms,Xamarin.forms,在我的项目中,我使用依赖项服务打开设备的位置。打开位置后,我需要修改UI。我在onAppearing()上添加了GPS状态检查代码。onAppearing方法最初触发并检查GPS状态。如果GPS状态为关闭,则用户界面上将显示位置共享按钮。如果我们点击共享位置按钮,我会将用户重定向到设备位置设置页面。当用户返回应用程序后,在该位置上,此时onAppearing()未启动 我的代码 protected override void OnAppearing() { base.OnAppearin

在我的项目中,我使用依赖项服务打开设备的位置。打开位置后,我需要修改UI。我在onAppearing()上添加了GPS状态检查代码。onAppearing方法最初触发并检查GPS状态。如果GPS状态为关闭,则用户界面上将显示位置共享按钮。如果我们点击共享位置按钮,我会将用户重定向到设备位置设置页面。当用户返回应用程序后,在该位置上,此时onAppearing()未启动

我的代码

protected override void OnAppearing()
{
    base.OnAppearing();
    ShareLocation();
}

public async void ShareLocation()
{
    var status = await Permissions.RequestAsync<Permissions.LocationAlways>();
    if (status == PermissionStatus.Granted)
    {
        bool gpsStatus = DependencyService.Get<ILocSettings>().isGpsAvailable();
        if (!gpsStatus)
        {
            location_sharing.IsVisible = true;
            location_sharing_on.IsVisible = false;
        }
        else
        {
            location_sharing_on.IsVisible = true;
            location_sharing.IsVisible = false;
        }
    }
}

通常,每当加载页面时,onAppearing()将始终执行。但我不知道这页上的问题是什么。在位置设置后加载页面时,onAppearing不会触发。我附上了一个示例项目。

当您从页面导航并从堆栈中的另一个页面返回到该页面时,将触发“OnAppearing”方法。在您的情况下,您将应用程序置于睡眠状态,当您恢复应用程序时,OnAppearing事件将不会调用,因为页面虽然已经存在,但尚未出现

您可以使用MessagingCenter来实现您的目标

App.xaml.cs

protected override void OnResume()
        {
            MessagingCenter.Send(this, "ShareLocation");
        }
MainPage.xaml.cs

protected override void OnAppearing()
        {
            base.OnAppearing();
            MessagingCenter.Subscribe<App>(this, "ShareLocation", (sender) =>
            {
                ShareLocation();
            });
            ShareLocation();
        }

        protected override void OnDisappearing()
        {
            base.OnDisappearing();
            MessagingCenter.Unsubscribe<App>(this, "ShareLocation");
        }
protected override void OnAppearing()
{
base.OnAppearing();
MessagingCenter.Subscribe(此“共享位置”,(发件人)=>
{
ShareLocation();
});
ShareLocation();
}
受保护的覆盖无效OnDisappearing()
{
base.OnDisappearing();
取消订阅(此“共享位置”);
}

“OnAppearing”方法在从页面导航并从堆栈中的另一个页面返回到该页面时激发。在您的情况下,您将应用程序置于睡眠状态,当您恢复应用程序时,OnAppearing事件将不会调用,因为页面虽然已经存在,但尚未出现

您可以使用MessagingCenter来实现您的目标

App.xaml.cs

protected override void OnResume()
        {
            MessagingCenter.Send(this, "ShareLocation");
        }
MainPage.xaml.cs

protected override void OnAppearing()
        {
            base.OnAppearing();
            MessagingCenter.Subscribe<App>(this, "ShareLocation", (sender) =>
            {
                ShareLocation();
            });
            ShareLocation();
        }

        protected override void OnDisappearing()
        {
            base.OnDisappearing();
            MessagingCenter.Unsubscribe<App>(this, "ShareLocation");
        }
protected override void OnAppearing()
{
base.OnAppearing();
MessagingCenter.Subscribe(此“共享位置”,(发件人)=>
{
ShareLocation();
});
ShareLocation();
}
受保护的覆盖无效OnDisappearing()
{
base.OnDisappearing();
取消订阅(此“共享位置”);
}

示例项目没有那么复杂。如果你下载了这个项目并检查了这个问题,那就好了fine@ShubhamTyagi我检查了样品。她的UI上有两个按钮。一个是“位置共享”按钮,另一个是“打开”按钮。从设置打开位置后,她需要隐藏位置共享按钮并显示“打开”按钮。这不起作用,因为当从设置返回应用程序时,onappearing没有启动。问题在于单击共享位置按钮时,它被重定向到用户位置设置页面,然后,我们返回需要执行的onappearing功能并更新UI。我们在onAppearing()上添加了GPS状态检查代码。onAppearing方法最初执行并检查GPS状态。但回到UI后,onAppearing()不会触发@ShubhamTyagiThe示例项目没有那么复杂。如果你下载了这个项目并检查了这个问题,那就好了fine@ShubhamTyagi我检查了样品。她的UI上有两个按钮。一个是“位置共享”按钮,另一个是“打开”按钮。从设置打开位置后,她需要隐藏位置共享按钮并显示“打开”按钮。这不起作用,因为当从设置返回应用程序时,onappearing没有启动。问题在于单击共享位置按钮时,它被重定向到用户位置设置页面,然后,我们返回需要执行的onappearing功能并更新UI。我们在onAppearing()上添加了GPS状态检查代码。onAppearing方法最初执行并检查GPS状态。但回到UI后,onAppearing()不会触发@ShubhamTyagi