java - 在 android 中禁用多选列表首选项中的复选框单击

标签 java android

我正在我的应用程序中使用扩展DialogPreference的mutliselectlistpreference。我没有使用任何适配器来构建用户界面。请找到下面的图片。 enter image description here

这里的问题是我能够保留周一和周二检查的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 
      }
    }    
});

关于java - 在 android 中禁用多选列表首选项中的复选框单击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24138675/

相关文章:

java - Tapestry 4 contrib表多次调用getModel()

java - 有什么方法可以读取java中导入项目的文件路径吗?

java - 单击 .mp3 链接时打开我的 Android 应用程序

java - 将标记放置在 Android 谷歌地图中后立即启动标记拖动事件

java - Android: Out of Memory Exception/decodeResource如何添加到VM Budget中?

android - 是否可以在 ARCore 运行时修改 3D 模型的结构?

java接口(interface)引用向下转型

java - 如何开发视频应用程序的屏幕捕获

java - 使用默认区域设置使用 DecimalFormat 舍入 2 位小数

java - 如何通过gcm发送自定义消息并得到其响应?