对话框 AlertDialog

弹出 AlertDialog 对话框,观察 Activity 生命周期;当 Activity局部被遮挡时触发OnPause()暂停生命周期

MainActivity.cs 关键点击事件代码

private void Button_Click(object sender, EventArgs e)
{
    //Toast.MakeText(this, "FoxDevelop", ToastLength.Long).Show();

    var builder = new Android.App.AlertDialog.Builder(this);
    builder.SetTitle("友情提示")
           .SetMessage("请小心操作。这个步骤没法复原。");

    builder.SetCancelable(true);

    //取消按钮
    builder.SetNegativeButton("取消", (s, d) =>
    {
        Toast.MakeText(this, "你选择了取消。", ToastLength.Short).Show();
    });

    //确定按钮
    builder.SetPositiveButton("确定", (s, d) =>
    {
        Toast.MakeText(this, "你选择了确定。", ToastLength.Short).Show();
    });

    builder.Create();
    builder.Show();
}Code language: JavaScript (javascript)

完整MainActivity(加上生命周期日志打印)

using Android.App;
using Android.OS;
using Android.Widget;
using AndroidX.AppCompat.App;

namespace AlertDialogDemo
{
    [Activity(Label = "@string/app_name", Theme = "@style/AppTheme.NoActionBar", MainLauncher = true)]
    public class MainActivity : AppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.activity_main);
            Button btn = FindViewById<Button>(Resource.Id.MyButton);
            btn.Click += Button_Click;
        }

        private void Button_Click(object sender, EventArgs e)
        {
            var builder = new AlertDialog.Builder(this);
            builder.SetTitle("友情提示")
                   .SetMessage("请小心操作。这个步骤没法复原。");
            builder.SetCancelable(true);

            builder.SetNegativeButton("取消", (s, d) =>
            {
                Toast.MakeText(this, "你选择了取消。", ToastLength.Short).Show();
            });
            builder.SetPositiveButton("确定", (s, d) =>
            {
                Toast.MakeText(this, "你选择了确定。", ToastLength.Short).Show();
            });
            builder.Create();
            builder.Show();
        }

        // 生命周期:暂停(界面被局部遮挡,例如弹出AlertDialog就会触发)
        protected override void OnPause()
        {
            base.OnPause();
            Android.Util.Log.Debug("LifeCycle", "触发 OnPause() 暂停");
        }

        // 生命周期:恢复
        protected override void OnResume()
        {
            base.OnResume();
            Android.Util.Log.Debug("LifeCycle", "触发 OnResume() 恢复");
        }
    }
}Code language: HTML, XML (xml)

activity_main.axml布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Button
        android:id="@+id/MyButton"
        android:text="弹出对话框"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>Code language: HTML, XML (xml)

AlertDialog只是局部遮挡Activity,Activity不会销毁,进入暂停状态,执行OnPause()

关闭对话框后页面恢复,执行OnResume()

只有页面完全看不见(打开新Activity、按Home回到桌面),才会走到OnStop()

区分

  • Toast:短暂浮动提示,不会触发Activity的OnPause
  • AlertDialog对话框:遮挡一部分页面 → 触发OnPause暂停生命周期

打开Android日志窗口,点击按钮弹出对话框,就可以看到日志输出触发 OnPause();关闭对话框,输出触发 OnResume()

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注