•AlertDialog简介
AlertDialog 可以在当前界面弹出一个对话框
这个对话框是置顶于所有界面元素之上的,能够屏蔽掉其他控件的交互能力
因此, AlertDialog 一般用于提示一些非常重要的内容或者警告信息
AlertDialog 并不能直接 new 出来
如果我们要创建 AlertDialog 的话,我们需要使用到该类中的一个静态内部类:public static class Builder
然后来调用 AlertDialog 里的相关方法,来对 AlertDialog 进行定制
最后调用 show() 方法来显示我们的 AlertDialog 对话框
•内置方法
setTitle : 为对话框设置标题
.setIcon : 为对话框设置图标
setMessage : 为对话框设置内容
setPositiveButton : 为对话框设置确定按钮的点击事件
setNegativeButton() : 为对话框设置取消按钮的点击事件
setNeutralButton() : 为对话框设置中立按钮的点击事件
setItems() : 创建简单的列表对话框
setSingleChoiceItems() : 创建单选列表对话框
setMultiChoiceItems() : 创建多选列表对话框
•实战演练之点餐--创建多选列表对话框
效果展示图:
实现代码:
MainActivity.java1 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 }实现过程中出现的 bug:
出错原因:setMultiChoiceItems() 的第二个参数应该是 boolean[] 类型,而我的 checkItems 是 Boolean[] 类型;
解决方案:将 checkItems 改成 boolean[] 类型就行了;
参考资料:Android 创建多选菜单,写setMultiChoiceItems()出现问题,提示不存在该方法的解决方法
注意:如果你是通过 AlertDialog 调用 .show() 方法的话,记得在 builder.setXXXX 的最后添加 .create() 生成一个AlertDialog对象;