Xamarin Android 中的 AlertDialog 和 DialogFragment 示例

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

对话框就像在当前窗口前面弹出的任何其他窗口一样,用于显示一些短消息、接受用户输入或询问用户决定。与 Toast 不同,对话框通常用于要求用户注意的地方。 Android 支持多种不同的方式来创建对话框,例如 AlertDialog FragmentDialog 。在这个例子中,我们将涵盖 AlertDialog 和 DialogFragment 的所有方面。

1. 在 Xamarin.Android 中使用 AlertDialog

AlertDialog Dialog 的子类,可以显示一个、两个或三个按钮。如果只想在此对话框中显示一个字符串,请使用 SetMessage() 方法。

以下代码片段可用于创建一个简单的 AlertDialog,其中包含两个按钮 Delete 和 Cancel。


 //set alert for executing the task
AlertDialog.Builder alert = new AlertDialog.Builder (this);
alert.SetTitle ("Confirm delete");
alert.SetMessage ("Lorem ipsum dolor sit amet, consectetuer adipiscing elit.");
alert.SetPositiveButton ("Delete", (senderAlert, args) => {
Toast.MakeText(this ,"Deleted!" , ToastLength.Short).Show();
});

alert.SetNegativeButton ("Cancel", (senderAlert, args) => { Toast.MakeText(this ,"Cancelled!" , ToastLength.Short).Show(); });

Dialog dialog = alert.Create(); dialog.Show();

上面的代码片段将产生如以下屏幕截图所示的输出。



2. 在 Xamarin.Android 中使用 DialogFragment

Android 3.0(API 级别 11) 发布以来,片段可以显示为对话框并称为 DialogFragment 。如果您支持旧的 android 版本,则可以使用片段兼容性支持库。

要创建对话框片段,我们将使用 DialogFragment 类。此类派生自 Fragment,其行为很像具有所有可用片段生命周期方法的片段。 Android 推荐使用 DialogFragment 而不是 AlerDialog。

您需要执行以下步骤来创建 DialogFragment

  • 创建一个从 DialogFragment 类扩展的新类。
  • 与常规片段一样,覆盖 OnCreateView() 回调以附加对话框布局。
  • 或者,您可以覆盖 OnCreateDialog() 方法并返回一个 Dialog 实例。此方法用于移植旧的 AlertDialog 代码,无需进行太多修改。

在此示例中,我们将看到 OnCreateView() 和 OnCreateDialog() 回调。

3. 使用 OnCreateDialog() 的对话框片段

以下代码片段显示了如何通过覆盖 OnCreateDialog() 方法来创建对话框。


 //set alert for executing the task
AlertDialog.Builder alert = new AlertDialog.Builder (this);
alert.SetTitle ("Confirm delete");
alert.SetMessage ("Lorem ipsum dolor sit amet, consectetuer adipiscing elit.");
alert.SetPositiveButton ("Delete", (senderAlert, args) => {
Toast.MakeText(this ,"Deleted!" , ToastLength.Short).Show();
});

alert.SetNegativeButton ("Cancel", (senderAlert, args) => { Toast.MakeText(this ,"Cancelled!" , ToastLength.Short).Show(); });

Dialog dialog = alert.Create(); dialog.Show();

4. 使用 OnCreateView() 的对话框片段

DialogFragment 与任何其他片段一样,应用相同的生命周期规则。现在我们必须重写 onCreateView 方法以将布局附加到视图层次结构并构建对话框片段。

让我们首先定义您的片段的布局。在此示例中,我使用了两个 TextView 和 Button。我的布局如下所示:


 //set alert for executing the task
AlertDialog.Builder alert = new AlertDialog.Builder (this);
alert.SetTitle ("Confirm delete");
alert.SetMessage ("Lorem ipsum dolor sit amet, consectetuer adipiscing elit.");
alert.SetPositiveButton ("Delete", (senderAlert, args) => {
Toast.MakeText(this ,"Deleted!" , ToastLength.Short).Show();
});

alert.SetNegativeButton ("Cancel", (senderAlert, args) => { Toast.MakeText(this ,"Cancelled!" , ToastLength.Short).Show(); });

Dialog dialog = alert.Create(); dialog.Show();

现在让我们从 OnCreateView() 方法中扩充布局。我的 DialogFragment 类如下所示:


 //set alert for executing the task
AlertDialog.Builder alert = new AlertDialog.Builder (this);
alert.SetTitle ("Confirm delete");
alert.SetMessage ("Lorem ipsum dolor sit amet, consectetuer adipiscing elit.");
alert.SetPositiveButton ("Delete", (senderAlert, args) => {
Toast.MakeText(this ,"Deleted!" , ToastLength.Short).Show();
});

alert.SetNegativeButton ("Cancel", (senderAlert, args) => { Toast.MakeText(this ,"Cancelled!" , ToastLength.Short).Show(); });

Dialog dialog = alert.Create(); dialog.Show();

上面的代码片段将产生如以下屏幕截图所示的输出。

5.添加DialogFragment

我们差不多完成了!在您的 Activity 中添加以下代码片段以实例化并显示对话框;


 //set alert for executing the task
AlertDialog.Builder alert = new AlertDialog.Builder (this);
alert.SetTitle ("Confirm delete");
alert.SetMessage ("Lorem ipsum dolor sit amet, consectetuer adipiscing elit.");
alert.SetPositiveButton ("Delete", (senderAlert, args) => {
Toast.MakeText(this ,"Deleted!" , ToastLength.Short).Show();
});

alert.SetNegativeButton ("Cancel", (senderAlert, args) => { Toast.MakeText(this ,"Cancelled!" , ToastLength.Short).Show(); });

Dialog dialog = alert.Create(); dialog.Show();

上面的代码片段将产生如以下屏幕截图所示的输出。