第4行定义用于复选框列表的字符串数组str。
第5行的布尔型数组flags定义了str数组在复选框列表中的选中状态,true为选中。flags数组的长度应与str数组长度相同。如果flags数组长度小于str数组长度,程序运行到第30行绑定两个数组到builder时会出错。如果flags数组长度大于str数组长度,程序运行到第45行取flags数组的长度,执行到第48行可能会因数组索引超出str数组范围而出错,只要将第45行的flags.length改成str.length程序就能正常运行。
第30行的setMultiChoiceItems()方法将AlertDialog设置为复选框列表。
第35行将复选项的变动值(true或false)同步到flags数组的对应项。
第45行使用for循环遍历数组flags,状态为true的索引项返回str数组的对应值。
第50行将对话框的返回结果传递给editText1。
第53~54行调用builder的create方法生成alertDialog1,再调用show方法显示对话框。
05、自定义控件
目前为止已经介绍了多种对话框,这些对话框的内置控件都是定制好的。本案例讲解自定义对话框中的控件。为便于讲解,对话框中的控件只加入EditText和Button,读者理解设计方式后可自行添加所需控件。
第17~19行通过自定义showAlertDialog()方法的不同参数调用不同形式的自定义对话框。
当参数为10时执行第29行开始的代码,实现动态添加控件,常用于对布局要求不高的场景。第30行使用EditText的构造方法生成一个文本输入框editTextName。第31行将生成的editTextName文本输入框添加到builder中。第32行添加对话框的标题。第33行添加“确定”按钮,按钮的单击监听器将对话框中的editTextName内容传回main.xml布局文件中的editText1中。
当参数为20时执行第42行开始的代码。此时调用已经设计好的布局文件login.xml。第43行声明LayoutInflater类型的变量inflater20。第44行使用inflate()方法将login.xml中名为linearLayoutLogin的线性布局作为View填充到viewLogin20。第45行是将builder的一系列方法放在一行中连续调用。相关按钮的监听器都设置为null,单击这些按钮就只能执行默认的关闭对话框操作。
当参数为30时执行第47行开始的代码,是对方法一的完善,可以返回文本输入框中的文字内容。实现的方式是重写按钮单击监听器代码。在第57行的findViewById()方法前加了viewLogin30限定。第49行viewLogin30对应的是login.xml布局文件的linearLayoutLogin。如果没有viewLogin30前缀,查找R.id.editTextName从main.xml中查询,找不到程序就会出错退出。如果两个文件中控件重名,没有viewLogin30前缀的findViewById()方法取回的就是main.xml布局文件中的控件。
带自定义控件AlertDialog运行结果如图4-89和图4-90所示。
■ 图4-89弹出带自定义控件AlertDialog
■ 图4-90返回带自定义控件AlertDialog信息
【注】Spinner、AutoCompleteTextView和AlertDialog都支持类似的弹出框功能,使用时注意各自的优缺点和使用场景。
本文地址:百科问答频道 https://www.neebe.cn/wenda/903069_3.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!