•AlertDialog简介

  AlertDialog 可以在当前界面弹出一个对话框;

  这个对话框是置顶于所有界面元素之上的,能够屏蔽掉其他控件的交互能力;

  因此, AlertDialog 一般用于提示一些非常重要的内容或者警告信息;

  AlertDialog 并不能直接 new 出来;

  如果我们要创建 AlertDialog 的话,我们需要使用到该类中的一个静态内部类 public static class Builder ;

  然后来调用 AlertDialog 里的相关方法,来对 AlertDialog 进行定制;

  最后调用 show() 方法来显示我们的 AlertDialog 对话框;

•内置方法

  • setTitle : 为对话框设置标题

  • setIcon : 为对话框设置图标

  • setMessage : 为对话框设置内容

  • setPositiveButton : 为对话框设置确定按钮的点击事件

  • setNegativeButton() : 为对话框设置取消按钮的点击事件

  • setNeutralButton() : 为对话框设置中立按钮的点击事件

  • setItems() : 创建简单的列表对话框

  • setSingleChoiceItems() : 创建单选列表对话框

  • setMultiChoiceItems() : 创建多选列表对话框

•setCancelable()&setCanceledOnTouchOutside()

  • setCancelable(false)

    • dialog 弹出后,点击屏幕或返回键,dialog 不消失
  • setCanceledOnTouchOutside(false)

    • dialog弹出后,点击屏幕,dialog不消失
    • 点击返回键 dialog 才会消失

•实战演练之点餐--创建多选列表对话框

效果展示图

    

准给工作

  新建一个项目,选择 Empty Activity,这样,系统为我们自动生成了 MainActivity.java 喝 activity_main.xml 文件;

  在 activity_main.xml 中添加如下布局文件;

<?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"
android:padding="10dp"> <Button
android:id="@+id/btn_order"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="ORDER"/> </LinearLayout>

  在该布局中只放置了一个 Button 按钮;

  修改 MainActivity.java 中的代码;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    final private Context mContext = MainActivity.this;
private Button Btn;
private AlertDialog alert = null;
private AlertDialog.Builder builder = null;
private boolean[] checkItems;
private String[] menu; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); Btn = findViewById(R.id.btn_order);
Btn.setOnClickListener(this);
} public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_order:
final String[] menu = new String[]{"猪肉炖粉条", "小鸡炖蘑菇", "宫保鸡丁", "可乐鸡翅"};
checkItems = new boolean[]{false, false, false, false};
alert = null;
builder = new AlertDialog.Builder(mContext);
alert = builder.setTitle("菜单")
.setMultiChoiceItems(menu, checkItems, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
checkItems[which] = isChecked;
}
})
.setPositiveButton("提交", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
int cnt = 0;
String result = "客官,您点了“";
boolean flag = false;
for (int i = 0; i < checkItems.length; ++i) {
if (checkItems[i]) {
cnt++;
if (flag == true)
result += ",";
result += menu[i];
flag = true;
}
}
result += "”,共" + cnt + "道菜!";
Toast.makeText(mContext, result, Toast.LENGTH_LONG).show();
}
})
.create();//通过 create() 生成一个AlertDialog 对象
alert.show();
break;
default:
break;
}
}
}

实现过程中出现的 bug

出错原因

  setMultiChoiceItems() 的第二个参数应该是 boolean[] 类型,而我的 checkItems 是 Boolean[] 类型;

解决方案

  将 checkItems 改成 boolean[] 类型就行了;

  参考资料:Android 创建多选菜单,写setMultiChoiceItems()出现问题,提示不存在该方法的解决方法

  注意:如果你是通过 AlertDialog 调用 .show() 方法的话,记得在 builder.setXXXX 的最后添加 .create() 生成一个AlertDialog对象;

•声明

  参考资料

  【菜鸟教程

  【第一行代码(第二版)】

Android学习之 AlertDialog的更多相关文章

  1. Android学习笔记--AlertDialog应用

    1. 自定义实现带图标的TextView IconTextView.java package com.evor.andtest; import android.content.Context; imp ...

  2. Android学习:AlertDialog对话框

    AlertDialog可以生成各种内容的对话框,它生成的对话框包含4个区域:图标区,标题区,内容区,按钮区 <?xml version="1.0" encoding=&quo ...

  3. Android – 学习操作NFC – 2

    在<Android – 学习操作NFC – 1>说明了Android在处理NFC tag的机制.tag dispatch system的运作流程,以及三种ACTION_NDEF_DISCO ...

  4. Android学习笔记进阶之在图片上涂鸦(能清屏)

    Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...

  5. android学习日记03--常用控件Dialog

    常用控件 9.Dialog 我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框 对话框,要创建对话框之前首先要创建Bui ...

  6. Android之自定义AlertDialog和PopupWindow实现(仿微信Dialog)

    我们知道,在很多时候,我们都不用Android内置的一些控件,而是自己自定义一些自己想要的控件,这样显得界面更美观. 今天主要是讲自定义AlertDialog和popupWindow的使用,在很多需求 ...

  7. 【转】 Pro Android学习笔记(四五):Dialog(2):DialogFragment

    [-] 重写onCreateView 通过onCreateView设置UI和按键反馈 信息保存 重写onCreateDialog DialogFragment的实例newInstance()已经在上一 ...

  8. Android学习路线总结,绝对干货

    title: Android学习路线总结,绝对干货 tags: Android学习路线,Android学习资料,怎么学习android grammar_cjkRuby: true --- 一.前言 不 ...

  9. Android 学习资源

    下面这些资源对Android开发来说是很有帮助的! 最常用的: Android开发官方网站:http://developer.android.com/index.html 这个网站应该是Android ...

随机推荐

  1. 如何用 js 实现一个 class 类函数

    如何用 js 实现一个 class 类函数 原理 实现方式 总结 refs https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refere ...

  2. JavaScript Learning Paths(ES5/ES6/ES-Next)

    JavaScript Learning Paths(ES5/ES6/ES-Next) JavaScript Expert refs https://developer.mozilla.org/en-U ...

  3. windows 设置右键菜单

    编辑注册表 在文件 右键菜单中添加 xx.reg: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\vscode] &q ...

  4. 「NGK每日快讯」12.4日NGK公链第31期官方快讯!

  5. springboot项目启动后tomcat服务器自动关闭 解决方法

    需要在pom.xml中添加 <dependency> <groupId>org.springframework.boot</groupId> <artifac ...

  6. CentOS部署TOMCAT8

    官网下载地址:https://tomcat.apache.org/download-80.cgi 版本:TOMCAT 8 -- Core--tar.gz 首先需要将文件传输到CentOS的/usr/s ...

  7. PyTorch 自定义数据集

    准备数据 准备 COCO128 数据集,其是 COCO train2017 前 128 个数据.按 YOLOv5 组织的目录: $ tree ~/datasets/coco128 -L 2 /home ...

  8. TERSUS无代码开发(笔记02)-简单实例加法

    简单实例加法 1.用户端元件(显示元件)(40个) 图标 英文名称 元件名称 使用说明 服务器端 客户端 Pane 显示块 是一个显示块,是HTML的div标签   √ Row 行 行元件中的显示元件 ...

  9. 看完了进程同步与互斥机制,我终于彻底理解了 PV 操作

    尽人事,听天命.博主东南大学硕士在读,热爱健身和篮球,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收录于 CS-Wiki(Gitee 官 ...

  10. Java基本概念:类

    一.描述 类是一种抽象的数据类型,它是对某一类事物整体的描述或定义,但是并不能代表某一个具体的事物. 例如,我们生活中所说的词语:动物.植物.手机.电脑等等.这些也都是抽象的概念,而不是指的某一个 具 ...