•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. vue & less bug

    vue & less bug bezierEasingMixin(); ^ Inline JavaScript is not enabled. Is it set in your option ...

  2. MobX All In One

    MobX All In One Simple, scalable state management. https://mobx.js.org/README.html https://github.co ...

  3. Rust learning notes

    Rust learning notes Rust Version 1.42.0 $ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs ...

  4. HTML5 & custom element & template

    HTML5 & custom element & template template https://codepen.io/xgqfrms/pen/eYYExvp https://cs ...

  5. postman 发送数组

    原文 users[]:aa users[]:22 object[] // { users: [ { name: ' "ajanuw"', pwd: ' "aaa" ...

  6. RT-Thread学习笔记3-线程间通信 & 定时器

    目录 1. 事件集的使用 1.1 事件集控制块 1.2 事件集操作 2. 邮箱的使用 2.1 邮箱控制块 2.2 邮箱的操作 3. 消息队列 3.1 消息队列控制块 3.2 消息队列的操作 4. 软件 ...

  7. Vue 组件的通信方式都有哪些?

    说一下 Vue 组件的通信方式都有哪些?(父子组件,兄弟组件,多级嵌套组件等等) 一.父组件向子组件传值 二.子组件向父组件传值 三.兄弟组件传值 四.跨组件 一.父组件向子组件传值 1.1props ...

  8. spring框架aop用注解形式注入Aspect切面无效的问题解决

    由于到最后我的项目还是有个邪门的错没解决,所以先把文章大概内容告知: 1.spring框架aop注解扫描默认是关闭的,得手动开启. 2.关于Con't call commit when autocom ...

  9. H5 常见问题汇总及解决方案

    原文链接:http://mp.weixin.qq.com/s/JVUpsz9QHsNV0_7U-3HCMg H5 项目常见问题汇总及解决方案 -- 由钟平勇分享 转自 https://github.c ...

  10. Python 爬虫使用动态切换ip防止封杀

    对于爬虫被封禁 ! 爬虫一般来说只要你的ip够多,是不容易被封的. 一些中小网站要封杀你,他的技术成本也是很高的,因为大多数网站没有vps,他们用的是虚拟空间或者是sae,bae这样的paas云. 其 ...