Android Studio 之 AlertDialog

•AlertDialog简介

  • AlertDialog 可以在当前界面弹出一个对话框

  • 这个对话框是置顶于所有界面元素之上的,能够屏蔽掉其他控件的交互能力

  • 因此, AlertDialog 一般用于提示一些非常重要的内容或者警告信息

  • AlertDialog 并不能直接 new 出来

  • 如果我们要创建 AlertDialog 的话,我们需要使用到该类中的一个静态内部类:public static class Builder

  • 然后来调用 AlertDialog 里的相关方法,来对 AlertDialog 进行定制

  • 最后调用 show() 方法来显示我们的 AlertDialog 对话框

•内置方法

  • setTitle : 为对话框设置标题

  • .setIcon : 为对话框设置图标

  • setMessage : 为对话框设置内容

  • setPositiveButton : 为对话框设置确定按钮的点击事件

  • setNegativeButton() : 为对话框设置取消按钮的点击事件

  • setNeutralButton() : 为对话框设置中立按钮的点击事件

  • setItems() : 创建简单的列表对话框

  • setSingleChoiceItems() : 创建单选列表对话框

  • setMultiChoiceItems() : 创建多选列表对话框

•实战演练之点餐--创建多选列表对话框

  效果展示图:

    

   实现代码:

 1 import androidx.appcompat.app.AlertDialog;
 2 import androidx.appcompat.app.AppCompatActivity;
 3 
 4 import android.content.Context;
 5 import android.content.DialogInterface;
 6 import android.os.Bundle;
 7 import android.view.View;
 8 import android.widget.Button;
 9 import android.widget.Toast;
10 
11 public class MainActivity extends AppCompatActivity implements View.OnClickListener{
12 
13     private Button Btn2;
14     private AlertDialog alert = null;
15     private AlertDialog.Builder builder = null;
16     private boolean[] checkItems;
17     private String[] menu;
18     final private Context mContext = MainActivity.this;
19 
20     @Override
21     protected void onCreate(Bundle savedInstanceState) {
22         super.onCreate(savedInstanceState);
23         setContentView(R.layout.activity_main);
24         Btn2 = findViewById(R.id.btn_2);
25         Btn2.setOnClickListener(this);
26     }
27 
28     public void onClick(View v){
29         switch(v.getId())
30         {
31             case R.id.btn_2:
32                 final String[] menu = new String[]{"猪肉炖粉条","小鸡炖蘑菇","宫保鸡丁","可乐鸡翅"};
33                 checkItems = new boolean[]{false,false,false,false};
34                 alert = null;
35                 builder = new AlertDialog.Builder(mContext);
36                 alert = builder.setTitle("菜单")
37                         .setMultiChoiceItems(menu, checkItems, new DialogInterface.OnMultiChoiceClickListener()
38                         {
39                             @Override
40                             public void onClick(DialogInterface dialog, int which, boolean isChecked)
41                             {
42                                 checkItems[which] = isChecked;
43                             }
44                         })
45                         .setPositiveButton("提交", new DialogInterface.OnClickListener()
46                         {
47                             @Override
48                             public void onClick(DialogInterface dialog, int which)
49                             {
50                                 int cnt = 0;
51                                 String result = "客官,您点了“";
52                                 boolean flag=false;
53                                 for(int i=0;i < checkItems.length;++i)
54                                 {
55                                     if(checkItems[i])
56                                     {
57                                         cnt++;
58                                         if(flag== true)
59                                             result += ",";
60                                         result += menu[i];
61                                         flag=true;
62                                     }
63                                 }
64                                 result += "”,共"+Integer.toString(cnt)+"道菜!";
65                                 Toast.makeText(mContext,result,Toast.LENGTH_LONG).show();
66                             }
67                         })
68                         .create();//通过 create() 生成一个AlertDialog 对象
69                 alert.show();
70                 break;
71             default:
72                 break;
73         }
74     }
75 }
MainActivity.java

  实现过程中出现的 bug:

    

  出错原因:setMultiChoiceItems() 的第二个参数应该是 boolean[] 类型,而我的 checkItems 是 Boolean[] 类型;

  解决方案:将 checkItems 改成 boolean[] 类型就行了;

  参考资料:Android 创建多选菜单,写setMultiChoiceItems()出现问题,提示不存在该方法的解决方法

  注意:如果你是通过 AlertDialog 调用 .show() 方法的话,记得在 builder.setXXXX 的最后添加 .create() 生成一个AlertDialog对象;

猜你喜欢

转载自www.cnblogs.com/hyacinthLJP/p/12403590.html