如何判断AlertDialog中哪些复选框已勾选、哪些未勾选?
如何判断AlertDialog中复选框的勾选状态?
嗨,我来帮你搞定这个问题!你已经用到ArrayList来存选中项了,其实只需要稍微完善一下代码,就能轻松知道哪些复选框被勾选啦。下面给你两种实用的方法:
方法一:实时监听勾选状态并记录
你可以在构建AlertDialog的时候,借助setMultiChoiceItems的监听回调,实时把选中/取消选中的选项索引存到集合里,这样点击确认时直接用集合里的内容就行。代码调整后是这样的:
final CharSequence[] items = {" Custom/Default Filename ", "With Date&Time "," With this device's model "}; // 初始化选中状态数组,默认全不选中就全设为false boolean[] checkedItems = new boolean[items.length]; // 注意拼写哦,建议改成selectedItems更规范 final ArrayList<Integer> selectedItems = new ArrayList<>(); AlertDialog dialog2 = new AlertDialog.Builder(Settings.this) .setTitle("设置文件名格式") .setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { if (isChecked) { // 勾选时把当前选项的索引加入集合 selectedItems.add(which); } else { // 取消勾选时移除对应的索引 selectedItems.remove(Integer.valueOf(which)); } } }) .setPositiveButton("确认", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { // 现在遍历集合就能知道哪些选项被选中了,接下来拼接文件名 StringBuilder filenameBuilder = new StringBuilder(); for (Integer index : selectedItems) { filenameBuilder.append(items[index]).append("_"); } // 去掉最后多余的下划线 if (filenameBuilder.length() > 0) { filenameBuilder.deleteCharAt(filenameBuilder.length() - 1); } // 这里就可以用filenameBuilder生成最终要保存的文件名啦 } }) .setNegativeButton("取消", null) .create(); dialog2.show();
方法二:点击确认时统一获取状态
如果不想实时监听,也可以在用户点击确认按钮的时候,直接从AlertDialog的ListView里获取每个选项的勾选状态:
.setPositiveButton("确认", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { AlertDialog alertDialog = (AlertDialog) dialog; ListView listView = alertDialog.getListView(); // 遍历所有选项,逐个判断是否被勾选 for (int i = 0; i < items.length; i++) { boolean isChecked = listView.isItemChecked(i); if (isChecked) { selectedItems.add(i); } } // 后续的文件名拼接逻辑和上面一样就行 } })
另外提醒你一下,你之前写的seletedItems拼写有误,改成selectedItems可以避免后续出现不必要的错误哦。如果需要默认选中某些选项,只要把checkedItems数组对应的位置设为true,同时把对应的索引提前加入selectedItems集合就好啦。
内容的提问来源于stack exchange,提问作者user9309572
相关产品推荐
相关产品推荐

