我正在使用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次。
答案 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);
注意:如果有一天谷歌会更改默认持续时间,警报会很少提前显示。但我很有信心他们不会很快做到这一点。所以你应该没事。