Had*_*ari 3 back-button xamarin.android async-await xamarin.forms
最近,我不得不向Xamarin Forms移动应用程序添加一个功能。当用户按下后退按钮(在 Android 手机中)时,该功能会显示是/否提示。如果用户选择否,它将丢弃该按钮,否则,它将应用后退按钮,这将隐藏应用程序。
我知道为了检测Xamarin Forms 中的后退按钮,我必须覆盖Page.OnBackButtonPressed方法。为了绕过后退按钮,它应该返回true,如下所示:
protected override bool OnBackButtonPressed()
{
if (DisplayAlert("", "Are you sure?", "Yes", "No"))
return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
但问题在于,Page.DisplayAlert是一种异步方法,必须在主 (UI) 线程上调用。所以经过大量的搜索,我想出了这个我想分享的想法。
我对如何改进的任何想法/建议持开放态度。
我认为答案是在获得DisplayAlert的结果后模拟后退按钮。
为了模拟后退按钮,我发现调用Activity.OnBackPressed很有用。
这肯定不是最好的主意,但很容易以这种方式在 Shared/PCL Xamarin Forms 项目中调用此方法:
所以整个解决方案是这样的:
Xamarin 表单页面类
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
Xamarin Android MainActivity 类
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());
}
}
Run Code Online (Sandbox Code Playgroud)