我正在使用在我的应用程序中扩展DialogPreference的mutliselectlistpreference。而且我还没有使用任何适配器来构建UI。请找到下图。

这里的问题是我能够保留星期一和星期二检查的CheckBox,但是我不能使这些项目只读,而用户将不能取消选中这些项目。我想使两个项目都变灰。你能帮我这个忙吗?

 @Override
    protected void onPrepareDialogBuilder(Builder builder) {
        super.onPrepareDialogBuilder(builder);

        if (entries == null || entryValues == null) {
            throw new IllegalStateException(
                    "MultiSelectListPreference requires an entries array and an entryValues array.");
        }

        checked = new boolean[entryValues.length];
        List<CharSequence> entryValuesList = Arrays.asList(entryValues);
        List<CharSequence> entriesList = Arrays.asList(entries);
        for (int i = 0; i < entryValues.length; ++i) {
            if("Monday".equals(entriesList.get(i).toString())){
                checked[i]=true;
            }
        }
        if (values != null) {
            for (String value : values) {
                int index = entryValuesList.indexOf(value);
                if (index != -1) {
                    checked[index] = true;
                }
            }
        }


        builder.setMultiChoiceItems(entries, checked,
                new OnMultiChoiceClickListener() {
                    public void onClick(DialogInterface dialog, int which,
                            boolean isChecked) {
                        checked[which] = isChecked;
                    }
                });

    }

    @Override
    protected void onDialogClosed(boolean positiveResult) {
        super.onDialogClosed(positiveResult);

        if (positiveResult && entryValues != null) {
            for (int i = 0; i < entryValues.length; ++i) {

                if (checked[i]) {

                    newValues.add(entryValues[i].toString());

                }
            }

            if (callChangeListener(newValues)) {
                setValues(newValues);
            }
        }
    }

    @Override
    protected Object onGetDefaultValue(TypedArray a, int index) {
        CharSequence[] array = a.getTextArray(index);

        Set<String> set = new HashSet<String>();

        for (CharSequence item : array) {
            set.add(item.toString());
        }

        return set;
    }

    @Override
    protected void onSetInitialValue(boolean restorePersistedValue,
            Object defaultValue) {
        @SuppressWarnings("unchecked")
        Set<String> defaultValues = (Set<String>) defaultValue;

        setValues((restorePersistedValue ? getPersistedStringSet(values)
                : defaultValues));
    }

    private Set<String> getPersistedStringSet(Set<String> defaultReturnValue) {
        String key = getKey();
        //String value = getSharedPreferences().getString("4", "Generic");
        return getSharedPreferences().getStringSet(key, defaultReturnValue);
    }

    private boolean persistStringSet(Set<String> values) {
        if (shouldPersist()) {
            // Shouldn't store null
            if (values == getPersistedStringSet(null)) {

                return true;
            }
        }

        SharedPreferences.Editor editor = getEditor();
        editor.putStringSet(getKey(), values);
        editor.apply();
        return true;
    }

    @Override
    protected Parcelable onSaveInstanceState() {
        if (isPersistent()) {
            return super.onSaveInstanceState();
        } else {
            throw new IllegalStateException("Must always be persistent");
        }
    }

最佳答案

您可以使用它们;

checkBox.setEnabled(true); // enable checkbox

checkBox.setEnabled(false); // disable checkbox


您也可以在选中带有以下代码的复选框后将其禁用:

checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener(){

    @Override
    public void onCheckedChanged(CompoundButton arg0, boolean isChecked) {
      if (isChecked){
          checkBox.setEnabled(false); // disable checkbox
      }
    }
});

10-08 04:51