最近,我不得不在 Xamarin Forms 移动应用程序中添加一项功能。当用户按下后退按钮(在Android手机中)时,该功能会显示是/否提示。如果用户选择否,它将丢弃该按钮,否则,它将应用隐藏应用程序的后退按钮。
我知道检测 Xamarin表单中的后退按钮我必须覆盖 Page.OnBackButtonPressed 方法。并且为了绕过后退按钮,它应该返回 true ,如下所示:
protected override bool OnBackButtonPressed()
{
if (DisplayAlert("", "Are you sure?", "Yes", "No"))
return false;
return true;
}
但问题在于 Page.DisplayAlert 是异步方法,必须在主(UI)线程上调用。经过大量的搜索后,我想出了这个想要分享的想法。
我对如何改进的任何想法/建议持开放态度。
答案 0 :(得分:3)
我认为在获得 DisplayAlert 的结果后,答案是模仿后退按钮。
为了模仿后退按钮,我发现调用 Activity.OnBackPressed 很有用。
当然,这不是最好的想法,但很容易以这种方式在Shared / PCL Xamarin Forms项目中调用此方法:
所以整个解决方案都是这样的:
Xamarin表单页面类
private class MyPage : ContentPage
{
public static Action EmulateBackPressed;
private bool AcceptBack;
protected override bool OnBackButtonPressed()
{
if (AcceptBack)
return false;
PromptForExit();
return true;
}
private async void PromptForExit()
{
if (await DisplayAlert("", "Are you sure to exit?", "Yes", "No"))
{
AcceptBack = true;
EmulateBackPressed();
}
}
}
Xamarin Android MainActivity Class
public class MainActivity : Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnCreate(Bundle bundle)
{
MyPage.EmulateBackPressed = OnBackPressed;
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(bundle);
Xamarin.Forms.Forms.Init(this, bundle);
LoadApplication(new App());
}
}