Android AlertDialog MultiChoiceItems-一次仅选择2项

Android AlertDialog MultiChoiceItems-一次仅选择2项,android,android-alertdialog,Android,Android Alertdialog,我的警报对话框中有4个复选框:A、B、C和D。我正在尝试获取使A只能与B、C或D一起选择的行为,因此一次只能选择2个 是否有一个解决方案能够实现这种行为?我看了一下通过谷歌能找到什么,但什么也找不到。我想我需要使用共享首选项,然后单击B、C和D中的每一个后,我可以在SP中存储一个字符串,引用B、C、D中的每一个,然后每次单击时它都可以检查SP中的字符串,如果从B、C或D中存储的值之一在其中,则从已勾选的值中取消勾选该复选框(希望这有意义),或者有更好的解决方案吗?谢谢 到目前为止,我所拥有的:

我的警报对话框中有4个复选框:A、B、C和D。我正在尝试获取使A只能与B、C或D一起选择的行为,因此一次只能选择2个

是否有一个解决方案能够实现这种行为?我看了一下通过谷歌能找到什么,但什么也找不到。我想我需要使用共享首选项,然后单击B、C和D中的每一个后,我可以在SP中存储一个字符串,引用B、C、D中的每一个,然后每次单击时它都可以检查SP中的字符串,如果从B、C或D中存储的值之一在其中,则从已勾选的值中取消勾选该复选框(希望这有意义),或者有更好的解决方案吗?谢谢

到目前为止,我所拥有的:

布尔[]选中=新布尔[]{true,false,false,false };//这是在我的类的顶部定义的,因此,一旦第一次选择对话框,默认情况下会选择

@覆盖
创建选项菜单(菜单菜单,菜单充气机){
充气机。充气(右菜单。过滤器选项,菜单);
super.onCreateOptions菜单(菜单,充气机);
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
开关(item.getItemId()){
案例R.id.filter:
警报对话框;
最终字符序列[]项={“A”、“B”、“C”、“D”};
//arraylist以保留所选项目
最终ArrayList seletedItems=新ArrayList();
shfObject=getActivity().getSharedReferences(“名称”,
上下文。模式(私人);
最终SharedReferences.Editor shfEditorObject=shfObject.edit();
AlertDialog.Builder=新建AlertDialog.Builder(getActivity());
建造商名称(“过滤器”);
builder.setMultiChoiceItems(项目,选中,
新的DialogInterface.OnMultiChoiceClickListener(){
@凌驾
公共void onClick(对话框接口对话框,
int indexSelected,boolean is checked){
如果(已检查){
添加(indexSelected);
开关(indexSelected){
案例0:
shfEditorObject.putString(
“Checkbox1勾选”、“勾选1”);
shfEditorObject.commit();
打破
案例1:
shfEditorObject.putString(
“checkbox2Ticked”、“Ticked2”);
shfEditorObject.commit();
打破
案例2:
shfEditorObject.putString(
“checkbox3Ticked”、“Ticked3”);
shfEditorObject.commit();
打破
案例3:
shfEditorObject.putString(
“勾选框4”、“勾选框4”);
shfEditorObject.commit();
打破
}
}
else if(seletedItems.contains(indexSelected)){
//否则,如果项目已在
//数组,移除它
//当用户选中
//复选框
}
}
})
//设置动作按钮
.setPositiveButton(“确定”,
新建DialogInterface.OnClickListener(){
@凌驾
公共void onClick(对话框接口对话框,
int id){
//用户单击“确定”时的代码
//您可以编写代码来保存
//此处选择项目
}
})
.setNegativeButton(“取消”,
新建DialogInterface.OnClickListener(){
@凌驾
公共void onClick(对话框接口对话框,
int id){
//用户单击“取消”时的代码
}
});
dialog=builder.create();//AlertDialog;像这样创建
//外环
dialog.show();
返回true;
违约:
打破
}
返回true;
}

选中每个项目时,您应该更新计数器。当计数器达到最大限制时,您可以禁用其他复选框

这个问题很好地回答了-

您可以使用上面的逻辑。让count=0初始值
然后检查otem上的计数增量。

您可以尝试一次检查更改()事件以检查选中的复选框数。当只有4个复选框时,为什么有5个布尔值?请更新您的问题,因为这没有意义。您是说A只能通过B/C/D选择,但稍后在注释中您会说A是默认选择的。这是怎么回事?如果取消选择A会发生什么?B、C、D不能再选择e?为了更清楚,您可以写出复选框的可能组合。
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.filteroptions, menu);
    super.onCreateOptionsMenu(menu, inflater);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.filter:

        AlertDialog dialog;

        final CharSequence[] items = { "A", "B", "C", "D" };
        // arraylist to keep the selected items
        final ArrayList<Integer> seletedItems = new ArrayList<Integer>();

        shfObject = getActivity().getSharedPreferences("NAME",
                Context.MODE_PRIVATE);
        final SharedPreferences.Editor shfEditorObject = shfObject.edit();
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("Filter");



        builder.setMultiChoiceItems(items, checked,
                new DialogInterface.OnMultiChoiceClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog,
                            int indexSelected, boolean isChecked) {

                        if (isChecked) {
                            seletedItems.add(indexSelected);

                            switch (indexSelected) {

                            case 0:
                                shfEditorObject.putString(
                                        "checkbox1Ticked", "Ticked1");

                                shfEditorObject.commit();
                                break;

                            case 1:

                                shfEditorObject.putString(
                                        "checkbox2Ticked", "Ticked2");

                                shfEditorObject.commit();

                                break;

                            case 2:

                                shfEditorObject.putString(
                                        "checkbox3Ticked", "Ticked3");

                                shfEditorObject.commit();

                                break;

                            case 3:

                                shfEditorObject.putString(
                                        "checkbox4Ticked", "Ticked4");

                                shfEditorObject.commit();

                                break;

                            }

                        }

                        else if (seletedItems.contains(indexSelected)) {
                            // Else, if the item is already in the
                            // array, remove it
                            // write your code when user Uchecked the
                            // checkbox

                        }

                    }
                })
                // Set the action buttons
                .setPositiveButton("OK",
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog,
                                    int id) {
                                // Your code when user clicked on OK
                                // You can write the code to save the
                                // selected item here

                            }
                        })
                .setNegativeButton("Cancel",
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog,
                                    int id) {
                                // Your code when user clicked on Cancel

                            }
                        });

        dialog = builder.create();// AlertDialog dialog; create like this
                                    // outside onClick
        dialog.show();

        return true;

    default:
        break;
    }

    return true;
}
if(Count == 2){
            cb.setChecked(false);
        }else if(b){
            Count++;
        }else if(!b){
            Count--;
        }