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 ... 
随机推荐
- TypeScript Errors All In One
			TypeScript Errors All In One 1. Property 'name' has no initializer and is not definitely assigned in ... 
- HTML5 dataset All In One
			HTML5 dataset All In One dataset https://developer.mozilla.org/en-US/docs/Web/API/HTMLOrForeignEleme ... 
- Xcode 切换 iOS 模拟器的 Dark 模式
			Xcode 切换 iOS 模拟器的 Dark 模式 SwiftUI // // ContentView.swift // MemorizeGame // // Created by 夏凌晨 on 20 ... 
- 使用 js 实现一个中文自动转换成拼音的工具库
			使用 js 实现一个中文自动转换成拼音的工具库 中文 => zhong-wen 应用场景 SEO 友好, URL 自动转换 blogs 发布文章,自动化部署,自动生成 url 的 path (时 ... 
- Docker & Node.js
			Docker & Node.js https://nodejs.org/en/docs/guides/nodejs-docker-webapp/ https://docs.docker.com ... 
- Micro Frontends &  microservices
			Micro Frontends & microservices https://micro-frontends.org/ https://github.com/neuland/micro-fr ... 
- Taro UI
			Taro UI 一套基于 Taro 框架开发的多端 UI 组件库 https://github.com/NervJS/taro-ui-demo https://taro-ui.aotu.io/#/do ... 
- yapi & mock JSON
			yapi & mock JSON json, body https://hellosean1025.github.io/yapi/documents/mock.html response bo ... 
- FTP返回值代表含义
			FTP:屏幕信息举例 1.用户要用FTP和远地主机(网络信息中心NIC上的主机)建立连接. 2.本地FTP发出的连接成功信息. 3.从远地服务器返回的信息,220表示"服务就绪". ... 
- SpringBoot(六):SpringBoot中如何使用Servlet?
			第一种方法: 1.使用Servlet3的注解方式编写一个Servlet 2.在main方法的主类上添加注解: @ServletComponentScan(basePackages = "co ... 
 
			
		
