Estoy intentando que funcione una subclase de Preferencias existente que ahorre un valor de color. No escribí la clase, pero se supone que está trabajando en android-7 y superior (estoy compilando para un destino android-9). El código fuente completo es available here. Aquí es donde se guarda la preferencia:Valor de preferencia personalizado de Android no guardado
@Override
public void onColorChanged(int color) {
if (isPersistent()) {
boolean ret = persistInt(color);
}
// (update preview box, other stuff)
}
Uso de la salida de depuración que puede decir que isPersistent()
vuelve true
, pero persistInt()
vuelve false
. De acuerdo con Android documentation, persistInt()
devuelve si la preferencia es persistente; ¿Cómo pueden estos devolver diferentes valores? (Nota: setPersistent(true)
se llama explícitamente desde el constructor.)
En cualquier caso, el valor no se guarda. Una llamada al getPersistedInt(defaultValue)
devuelve el valor predeterminado, incluso más adelante en la misma instancia de la clase. En el código siguiente, siempre se llama a getPersistedInt()
y siempre devuelve mDefaultValue
.
public int getValue() {
try {
if (isPersistent()) {
mValue = getPersistedInt(mDefaultValue);
}
} catch (ClassCastException e) {
mValue = mDefaultValue;
}
return mValue;
}
¿Por qué es esto y cómo puedo asegurarme de que la preferencia se mantenga?
Fwiw, aquí hay un proyecto mío con un widget 'ColorMixer', también empaquetado como una' ColorPreference': https://github.com/commonsguy/cwac-colormixer – CommonsWare
Gracias por el enlace, Miré el suyo pero decidí no hacerlo, porque aunque los controles deslizantes RGB pueden ser útiles para teléfonos sin pantalla táctil, mi aplicación requiere una pantalla táctil de todos modos, y preferiría algún tipo de selector de HSL. – tmandry