禁用 alertDialog 中的复选框项目

Disable Checkbox items in alertDialog

我正在通过警报对话框为 select 多个选项提供数组 我想在数组已满时禁用 selection

我已经能够在达到限制后停止向数组添加项目,但无法禁用复选框

 AlertDialog.Builder builder=new AlertDialog.Builder(this);
 View view=inflater.inflate(R.layout.dialog_genre,null,false);
 builder.setView(view).setTitle("Select Genres");

 builder.setMultiChoiceItems(array, checkedGenres, new DialogInterface.OnMultiChoiceClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which, boolean isChecked) {
            if(isChecked) {
                if (!selectedgenre.contains(String.valueOf(which)))
                    if(selectedgenre.size()<5)
                {
                    selectedgenre.add(String.valueOf(which));
                    checkedGenres[which]=true;
                }
                else{
                        Toast.makeText(getApplicationContext(),"you can't add more genres",Toast.LENGTH_LONG).show();
                    }
            }
            else if (selectedgenre.contains(String.valueOf(which)))
            {
             selectedgenre.remove(String.valueOf(which));
             checkedGenres[which]=false;
        }
    }
}

   builder.setMultiChoiceItems(array, checkedGenres, new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                if(isChecked) {
                    if (!selectedgenre.contains(String.valueOf(which)))
                        if(selectedgenre.size()<5)
                    {
                        selectedgenre.add(String.valueOf(which));
                        checkedGenres[which]=true;
                    }
                    else{
                        //set your checkbox to false here
                        //yourCheckbox.setchecked(false); 
                            Toast.makeText(getApplicationContext(),"you can't add more genres",Toast.LENGTH_LONG).show();
                        }
                }
                else
                {
                 selectedgenre.remove(String.valueOf(which));
                 checkedGenres[which]=false;
            }
        }
    }

试试这个..问题在你的其他部分

在你的 else 部分,将 clickable false 放在你的复选框上,并更改颜色以便用户可以识别它。

好的我已经解决了这个问题,两天后我才知道禁用复选框是一个漫长而忙碌的过程,但我们可以禁止选择,这就是我想做的。这是我的解决方案

    builder.setMultiChoiceItems(array, checkedGenres, new DialogInterface.OnMultiChoiceClickListener() {
        int count = 0;
        @Override
        public void onClick(DialogInterface dialog, int which, boolean isChecked) {
            if(isChecked) {
                if (!selectedgenre.contains(String.valueOf(array[which])))
                    if(selectedgenre.size()<5)
                {
                    selectedgenre.add(String.valueOf(array[which]));
                    checkedGenres[which]=true;                    
                }
                else{
                        count--;
                        ((AlertDialog) dialog).getListView().setItemChecked(which, false);
                        checkedGenres[which]=false;
                        Toast.makeText(getApplicationContext(),"you can't add this genre",Toast.LENGTH_LONG).show();
                    }
            }
            else if (selectedgenre.contains(String.valueOf(array[which])))
            {
                selectedgenre.remove(String.valueOf(array[which]));
                checkedGenres[which]=false;
            }
        }
    }

ListView 中的视图是可重复使用的,因此 items aren't really linked to a view. You can however enable or disable a view when it's being added to the ListView inside your AlertDialog's ListView. ViewGroup.setOnHierarchyChangeListener 让您可以这样做。

    final CharSequence[] items = new CharSequence[]
            {"9×19mm Sidearm", ".40 Dual Elites", "228 Compact", "Night Hawk .50C"};
    boolean[] checkedItems = new boolean[]{false, false, true, true};
    final boolean[] disabledItems = new boolean[]{false, true, false, true};

    Context context = this;
    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context);
    dialogBuilder.setTitle("Select your pistol");

    dialogBuilder.setMultiChoiceItems(items, checkedItems,
            new DialogInterface.OnMultiChoiceClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i, boolean checked) { 

        }
    });

    AlertDialog alertDialog = dialogBuilder.create();
    alertDialog.getListView().setOnHierarchyChangeListener(
            new ViewGroup.OnHierarchyChangeListener() {
        @Override
        public void onChildViewAdded(View parent, View child) {
            CharSequence text = ((AppCompatCheckedTextView)child).getText();
            int itemIndex = Arrays.asList(items).indexOf(text);
            child.setEnabled(disabledItems[itemIndex]);
        }

        @Override
        public void onChildViewRemoved(View view, View view1) {
        }
    });

    alertDialog.show();

请注意,setEnable 不会避免 clickListeners 触发。如果您不想点击复选框,请添加 child.setOnClickListener(null).