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对象;

•声明

  参考资料

  【菜鸟教程

  【第一行代码(第二版)】

posted @ 2020-03-03 17:44  MElephant  阅读(1115)  评论(0编辑  收藏  举报