首页 > 解决方案 > 如何在 Xamarin 表单中的生命周期事件上隐藏 TimePicker 和 DatePicker

问题描述

我在 android 上遇到了一个问题,当我们导航 OnPause() 时,我们的 TimePicker 和 DatePicker 保持可见。我们需要在用户后台应用程序时将用户重定向回登录屏幕,但如果 TimePicker 或 DatePicker 在他们这样做时处于活动状态,它会停留在屏幕上。它出现在登录屏幕上方,按取消或确定会使应用程序崩溃。

我们正在挂钩本机 android 生命周期事件(不仅仅是使用内置挂钩的 Xamarins),并且我们重定向 OnResume()。我已经在准系统应用程序中对此进行了测试,但它仍然会发生 OnPause()。

这是导致我们出现问题的 TimePicker:

<TimePicker x:Name="VitalTimePicker" HorizontalOptions="Fill" VerticalOptions="Fill" IsVisible="false" PropertyChanged="OnTimePickerPropertyChanged"/>  

这是一个在生命周期事件上更改屏幕的示例:

protected override void OnSleep()
    {
        App.Current.MainPage = new NavigationPage(new NotesPage());
    }

有任何想法吗?我正在考虑清除拾取器,但我似乎找不到如何做到这一点

编辑

只是为了添加更多上下文

Application类 (app.xaml.cs) 具有生命周期钩子,当我们的用户后台应用程序时,我们使用这些钩子来捕获它们。在这里,我们调用MainPage = new NavigationPage(new LoginPage());which 将应用程序带回登录页面。

我已经添加

protected override void OnDisappearing()  
   {
       VitalTimePicker.Unfocus();
       VitalDatePicker.Unfocus();
   }

到我正在工作的视图,它似乎在我们后台应用程序时被调用,但由于某种原因,当我们的登录页面再次弹出时,TimePicker 停留在屏幕上。

标签: xamarinxamarin.formsxamarin.android

解决方案


您可以通过编程方式关闭DatePickersTimePickers使用该方法Unfocus()。我建议在调用下一页之前关闭它们,因为我不知道在初始化另一个屏幕后它们是否能够被引用和关闭。

为您拥有的任何其他选择器创建一个调用VitalTimePicker.Unfocus()和相同的方法,并在更改为登录屏幕之前调用此方法,您应该一切顺利。


推荐阅读