【问题标题】:Xamarin forms inside Constructor display alert not showing?构造函数中的 Xamarin 表单显示警报未显示?
【发布时间】:2019-09-30 20:39:42
【问题描述】:

我想在我的主页加载时间显示警报。所以我在构造函数中声明了显示警报。但我没有得到任何回应。

我附上了我的示例代码。

public Home()
{
    InitializeComponent();
    if (!(Plugin.Connectivity.CrossConnectivity.Current.IsConnected))
    {

        if (System.IO.File.Exists(path + "App" + "/Data.txt"))
        {
            Device.BeginInvokeOnMainThread(async () =>
            {
                await DisplayAlert("Success", "Saved", "OK");
            });

        }
        else
        {
            Device.BeginInvokeOnMainThread(async () =>
            {
                await DisplayAlert("Oops", "Login Required", "OK");
            });

        }

    }
    else
    {
        GetDetails();
    }

}

【问题讨论】:

  • 您的代码是否在第一个 if 块中?

标签: c# xamarin xamarin.forms


【解决方案1】:

constructor 用于保留Initialization 代码。当Page 即将显示时调用OnAppearing() 方法。displayAlert() 将在此方法中成功。这是示例代码。

protected override void OnAppearing()
    {

        Application.Current.MainPage.DisplayAlert("Success", "Saved", "OK");

        base.OnAppearing();

}

按照其他答案中的建议,将初始化代码保留在 constructornew Task(Init).Start(); 中。将if else 的状态保存在bool 类型的字段中。根据字段更改OnAppearing() 方法中的消息。

【讨论】:

    【解决方案2】:

    您不能在类的 .ctor 中直接 awaitTask(搜索所以有很多关于此的问答)。

    在您的 .ctor 中,在 InitializeComponent 之后启动一个 void 任务(即发即弃风格):

    new Task(Init).Start();
    

    void 任务Init 看起来像:

    async void Init()
    {
        if (!(Plugin.Connectivity.CrossConnectivity.Current.IsConnected))
        {
            ~~~
        }
        else
        {
            GetDetails();
        }
    }
    

    【讨论】:

    • 在构造函数中启动新任务的建议很棒。但它仍然不显示消息,因为页面没有加载。初始化代码执行后,页面将加载。
    • @Sushi 感谢您的回答。但它不适合我。第一个答案是工作..
    • 同在这里,Application.Current.MainPage... 似乎是我在 OnAppearing() 例程中所缺少的。非常感谢。
    【解决方案3】:

    InitializeComponent() 中你使用过like await DisplayAlert("Success", "Saved", "OK"); 而不是像Application.Current.MainPage.DisplayAlert("Success", "Saved", "OK");这样的用法 那么它会正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-23
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多