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