您的OnMultiChoiceClickListener就在附近.它只有两个问题:首先,您的for循环不会遍历除单击的孩子以外的所有孩子.
// A loop to disable all items other than clicked one
for (int position = alertDialogList.getCheckedItemPosition(); position<
alertDialogList.getChildCount; position++)
{
alertDialogList.getChildAt(position).setEnabled(false);
}
您从单击的那一个开始,然后禁用该那一个,然后禁用它之后的所有子项,直到列表的末尾.只有严格在被单击的孩子之前的孩子不会被禁用.第二个问题是您的禁用代码将针对单击的任何项目运行,而不仅仅是“无”项目.尝试这样的事情.我正在使用它来识别是否已按下特殊的“无”项目.
private static final int specialItem = ...;
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if (which == singleItem) { // only if they clicked 'none'
final AlertDialog alertDialog = (AlertDialog) dialog;
final ListView alertDialogList = alertDialog.getListView();
for (int position = 0; position < alertDialogList.getChildCount(); position++)
{
if (position != which) {
alertDialogList.getChildAt(position).setEnabled(!isChecked);
}
}
}
}
请注意,如果不为0,我什么也不做.我的for循环从1开始,以避免项0,如果未选中并禁用了’none’项,它将设置每个要启用的元素如果没有项目被选中.
最后,我只注意到这不是多选对话框的常见行为.用户会对“无”选项的行为感到惊讶,因为它与其他所有选项都不相同.没有“ none”选项将更为常见:如果用户不选择任何其他选项,则意味着没有任何选择.如果您确实需要使用“无”选项,以告诉用户明确选择“无”与不回答之间的区别,请考虑使用自定义布局,并在复选框组之外使用单独的“无”按钮或单选按钮,因此用户可以说它的行为会有所不同.