Android学习之 AlertDialog
•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的更多相关文章
- Android学习笔记--AlertDialog应用
1. 自定义实现带图标的TextView IconTextView.java package com.evor.andtest; import android.content.Context; imp ...
- Android学习:AlertDialog对话框
AlertDialog可以生成各种内容的对话框,它生成的对话框包含4个区域:图标区,标题区,内容区,按钮区 <?xml version="1.0" encoding=&quo ...
- Android – 学习操作NFC – 2
在<Android – 学习操作NFC – 1>说明了Android在处理NFC tag的机制.tag dispatch system的运作流程,以及三种ACTION_NDEF_DISCO ...
- Android学习笔记进阶之在图片上涂鸦(能清屏)
Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...
- android学习日记03--常用控件Dialog
常用控件 9.Dialog 我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框 对话框,要创建对话框之前首先要创建Bui ...
- Android之自定义AlertDialog和PopupWindow实现(仿微信Dialog)
我们知道,在很多时候,我们都不用Android内置的一些控件,而是自己自定义一些自己想要的控件,这样显得界面更美观. 今天主要是讲自定义AlertDialog和popupWindow的使用,在很多需求 ...
- 【转】 Pro Android学习笔记(四五):Dialog(2):DialogFragment
[-] 重写onCreateView 通过onCreateView设置UI和按键反馈 信息保存 重写onCreateDialog DialogFragment的实例newInstance()已经在上一 ...
- Android学习路线总结,绝对干货
title: Android学习路线总结,绝对干货 tags: Android学习路线,Android学习资料,怎么学习android grammar_cjkRuby: true --- 一.前言 不 ...
- Android 学习资源
下面这些资源对Android开发来说是很有帮助的! 最常用的: Android开发官方网站:http://developer.android.com/index.html 这个网站应该是Android ...
随机推荐
- How To Install Linux & Nginx & MySQL & PHP (LEMP) stack on Raspberry Pi 3,Raspberry Pi 3,LEMP,Nginx,PHP, LEMP (not LNMP)
1. How To Install Linux & Nginx & MySQL & PHP (LEMP) stack on Raspberry Pi 3 R ...
- 1+X 证书制度
1+X 证书制度 教育部职业技术教育 http://www.cvae.com.cn/zgzcw/tzgg/202001/c0ddd6c87e6c42839f8cc3e09a2dce89.shtml 2 ...
- Web Vitals
Web Vitals https://www.youtube.com/watch?v=2k1QbgLAFdI&feature=youtu.be $ npm i -S web-vitals ht ...
- React 16.x Roadmap
React 16.x Roadmap https://reactjs.org/blog/2018/11/27/react-16-roadmap.html https://reactjs.org/blo ...
- Typescript & React & Vue
Typescript & React & Vue Typescript & React https://facebook.github.io/create-react-app/ ...
- component & slot
component & slot <template> <div class="myHeaderContainer"> <header cla ...
- WebAssembly JavaScript APIs
WebAssembly JavaScript APIs https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScrip ...
- 「NGK每日快讯」11.25日NGK公链第23期官方快讯!
- Windows 常用命令与快捷键
1.自选区截图Shift+win+s 2.全屏截图Prtsc 3.活动窗口截图Alt+Prtsc 4.新建文件夹Ctrl + Shift + N 5.返回上级目录Alt + 上方向键 6.后退到上一次 ...
- 深入解析 HTTP 缓存控制
缓存(Cache)是计算机领域里的一个重要概念,是优化系统性能的利器. 由于链路漫长,网络时延不可控,浏览器使用 HTTP 获取资源的成本较高.所以,非常有必要把"来之不易"的数据 ...

