•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. TypeScript Errors All In One

    TypeScript Errors All In One 1. Property 'name' has no initializer and is not definitely assigned in ...

  2. HTML5 dataset All In One

    HTML5 dataset All In One dataset https://developer.mozilla.org/en-US/docs/Web/API/HTMLOrForeignEleme ...

  3. Xcode 切换 iOS 模拟器的 Dark 模式

    Xcode 切换 iOS 模拟器的 Dark 模式 SwiftUI // // ContentView.swift // MemorizeGame // // Created by 夏凌晨 on 20 ...

  4. 使用 js 实现一个中文自动转换成拼音的工具库

    使用 js 实现一个中文自动转换成拼音的工具库 中文 => zhong-wen 应用场景 SEO 友好, URL 自动转换 blogs 发布文章,自动化部署,自动生成 url 的 path (时 ...

  5. Docker & Node.js

    Docker & Node.js https://nodejs.org/en/docs/guides/nodejs-docker-webapp/ https://docs.docker.com ...

  6. Micro Frontends & microservices

    Micro Frontends & microservices https://micro-frontends.org/ https://github.com/neuland/micro-fr ...

  7. Taro UI

    Taro UI 一套基于 Taro 框架开发的多端 UI 组件库 https://github.com/NervJS/taro-ui-demo https://taro-ui.aotu.io/#/do ...

  8. yapi & mock JSON

    yapi & mock JSON json, body https://hellosean1025.github.io/yapi/documents/mock.html response bo ...

  9. FTP返回值代表含义

    FTP:屏幕信息举例 1.用户要用FTP和远地主机(网络信息中心NIC上的主机)建立连接. 2.本地FTP发出的连接成功信息. 3.从远地服务器返回的信息,220表示"服务就绪". ...

  10. SpringBoot(六):SpringBoot中如何使用Servlet?

    第一种方法: 1.使用Servlet3的注解方式编写一个Servlet 2.在main方法的主类上添加注解: @ServletComponentScan(basePackages = "co ...