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对象;
•声明
参考资料
【菜鸟教程】
【第一行代码(第二版)】