xamarin - 如何在 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 停留在屏幕上。
解决方案
您可以通过编程方式关闭DatePickers
并TimePickers
使用该方法Unfocus()
。我建议在调用下一页之前关闭它们,因为我不知道在初始化另一个屏幕后它们是否能够被引用和关闭。
为您拥有的任何其他选择器创建一个调用VitalTimePicker.Unfocus()
和相同的方法,并在更改为登录屏幕之前调用此方法,您应该一切顺利。
推荐阅读
- jquery - 如何计算 django 模型字段
- ios - 由于自定义 Segues 导致的常见 iOS 内存泄漏问题。怎么修?
- javascript - 在 AJAX 成功的引导模式中确认后隐藏卡片
- file - 如何恢复已在 GitHub 中提交/推送的旧文件?
- javascript - 按钮 onclick 方法未传递元素 ID
- flutter - Flutter:获取仅使用 Firebase Auth(如 WhatsApp)在我的 Flutter 应用中注册的联系人列表
- angular - FormArray 中的 Angular FormGroup 省略了特定键
- r - 如何在根据 R 中的另一组定位它们的同时填充不同颜色的点?
- python - 将用户数据传递给 Django 中的管理操作
- html - 卡片列嵌入 Instragram 帖子:Chrome 和其他浏览器之间的区别