AlertDialog出现在它之前(Android)

时间:2018-01-23 07:50:43

标签: c# android alertdialog behavior

我正在使用C#创建一个Android应用程序,这是我的MainActivity:

[Activity(Label = "TestAlertDialogDisappearing", MainLauncher = true)]
public class MainActivity : Activity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.Main);

        DisplayToasts();
    }

    public void DisplayToast()
    {
        Toast.MakeText(this, "Some toast", ToastLength.Short).Show();
    }

    public void DisplayToasts()
    {
        for(int i = 0; i <= 5; i++)
        {
            DisplayToast();
        }

        ImportFinishedEventHandler importFinishedHandler = new ImportFinishedEventHandler();
        importFinishedHandler.OnImportFinished += ShowAlertMessage;
        importFinishedHandler.FireEvent();
    }

    private void ShowAlertMessage(object sender, EventArgs e)
    {
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
        alertDialog.SetMessage("Alert Dialog");
        alertDialog.SetPositiveButton("OK", delegate
        {
            alertDialog.Dispose();
        });

        Dialog dialog = alertDialog.Create();
        dialog.Show();
    }
}

class ImportFinishedEventHandler
{
    public event EventHandler<EventArgs> OnImportFinished;
    public void FireEvent()
    {
        if (OnImportFinished != null)
        {
            OnImportFinished(this, new EventArgs());
        }
    }
}

根据代码序列alertDialog必须出现在所有Toasts外观之后,但在我的情况下它同时出现。为什么这样,我该如何解决? StackOverflow希望我提供更多细节,但我不知道还有什么要说的,所以我会重复这句话2次。 StackOverflow希望我提供更多详细信息,但我不知道还有什么要说的,所以我会重复这句话2次。

1 个答案:

答案 0 :(得分:0)

Toast display的工作方式不同。您的应用程序将向OS发送信号以显示吐司,然后继续循环的下一次迭代。这就是让你一起看警报和吐司的原因。

显示时间的Toast为2秒(LENGTH_SHORT)或3.5秒(LENGTH_LONG)。尝试使用处理程序并根据您的选择跳过调用警告对话框12(6 * 2)或21(6 * 3.5)秒。在Java

中应该是这样的
new android.os.Handler(getMainLooper()).postDelayed(new Runnable() {
    @Override
    public void run() {
        showAlert();
    }
}, numberOfToast * lengthOfEachToast);

注意:如果有一天谷歌会更改默认持续时间,警报会很少提前显示。但我很有信心他们不会很快做到这一点。所以你应该没事。