Отключить флажок в блоке multiselectListPreference в android

Я использую mutliselectlistpreference, который расширяет DialogPreference в моем приложении. И я не использовал адаптер для создания пользовательского интерфейса. Пожалуйста, найдите изображение ниже.

Проблема здесь в том, что я могу сохранить 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(********** 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");
 }
 }
</string></string></string></string></string></string></string></charsequence></charsequence>
1 ответ

Вы можете использовать их;

checkBox.setEnabled(true); // enable checkbox

checkBox.setEnabled(false); // disable checkbox

Также вы можете отключить их после проверки checkbox с помощью этого кода:

checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener(){

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

licensed under cc by-sa 3.0 with attribution.