【问题标题】:await DisplayAlert answer when using OnBackButtonpressed() for user confimation使用 OnBackButtonpressed() 进行用户确认时等待 DisplayAlert 回答
【发布时间】:2020-04-13 14:59:10
【问题描述】:

我想使用 Xamarin Forms 的 OnBackButtonPressed() 内置功能将它们导航到 MainPage 或在回答 DisplayAlert() 时将它们保留在当前页面。

问题是当调用OnBackButtonPressed() 时,我无法等待答案(在本例中为OnAlertYesNoClicked();),并且由于布尔值的默认值为false,它只会关闭应用程序.

有没有办法将用户的答案用作OnBackButtonPressed() 的布尔值?

例子:

    bool action;
    async public void OnAlertYesNoClicked()
    {
        bool action = await DisplayAlert("Question?", "Are you sure you want to go back? Your result wont be saved!", "Yes", "No");
    }

    protected override bool OnBackButtonPressed()
    {
        OnAlertYesNoClicked();
        if(action == true)
        {
            Navigation.PushModalAsync(new MainPage(), true);
            return false;
        }
        else
        {
            return true;
        }  
    }

【问题讨论】:

    标签: c# android xaml xamarin


    【解决方案1】:

    覆盖硬件返回按钮并向用户显示确认对话框的简单方法。

     protected  override  bool OnBackButtonPressed()
        {
            //return base.OnBackButtonPressed();
    
            Device.BeginInvokeOnMainThread(async () =>
            {
                var result = await this.DisplayAlert("Question?", "Are you sure you want to go back? Your result wont be saved!", "Yes", "No");
                if (result) await this.Navigation.PushAsync(new Page14()); // or anything else
    
            });
    
    
            return true;
        }
    

    【讨论】:

      【解决方案2】:

      发生的情况是在根据用户输入更改值之前进行检查。因此,您希望直接根据用户输入进行检查。

      为了做到这一点,而不是写你写的,你可能想这样做:

      public async Task<bool> OnAlertYesNoClicked()
      {
          return await DisplayAlert("Question?", "Are you sure you want to go back? Your result wont be saved!", "Yes", "No");
      }
      
      protected override bool OnBackButtonPressed()
      {
          if(OnAlertYesNoClicked().Result())
          ...
      

      最好不要使用 .Result() 来获取响应,但不能将 OnBackButtonPressed 更改为返回 Task。

      【讨论】:

      • 感谢您的帮助,但 Cherry Bu 似乎为我找到了解决方案!
      • 没问题。那个更好:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-20
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多