मैं एक रंगीन मूल्य बचाता है जो काम करने के लिए एक मौजूदा वरीयता subclass प्राप्त करने की कोशिश कर रहा हूँ। मैंने कक्षा नहीं लिखी, लेकिन यह एंड्रॉइड -7 और ऊपर (मैं एक एंड्रॉइड 9 लक्ष्य के लिए संकलित कर रहा हूं) पर काम कर रहा हूं। पूर्ण स्रोत कोड available here है। यहाँ जहां वरीयता सहेजा जाता है है:एंड्रॉइड कस्टम वरीयता मान सहेजा नहीं गया
@Override
public void onColorChanged(int color) {
if (isPersistent()) {
boolean ret = persistInt(color);
}
// (update preview box, other stuff)
}
का उपयोग डिबग आउटपुट मैं बता सकता isPersistent()
रिटर्न true
, लेकिन persistInt()
रिटर्न false
कि। Android documentation के अनुसार, persistInt()
लौटाता है कि वरीयता लगातार है या नहीं; ये अलग-अलग मूल्य कैसे वापस कर सकते हैं? (नोट: setPersistent(true)
स्पष्ट रूप से निर्माता से बुलाया जाता है।)
किसी भी मामले में, मान सहेजा नहीं जाता है। getPersistedInt(defaultValue)
पर एक कॉल डिफ़ॉल्ट मान देता है, बाद में कक्षा के उसी उदाहरण में भी। नीचे दिए गए कोड में, getPersistedInt()
हमेशा कॉल किया जाता है और हमेशा mDefaultValue
देता है।
public int getValue() {
try {
if (isPersistent()) {
mValue = getPersistedInt(mDefaultValue);
}
} catch (ClassCastException e) {
mValue = mDefaultValue;
}
return mValue;
}
यह क्यों है, और मैं यह कैसे सुनिश्चित कर सकता हूं कि वरीयता जारी रहेगी?
Fwiw, यहाँ एक 'ColorMixer' विजेट के साथ मेरा एक परियोजना के रूप में भी एक' ColorPreference' पैक है: https://github.com/commonsguy/cwac-colormixer लिंक के लिए – CommonsWare
धन्यवाद, मैंने तुम्हारा ध्यान देखा था लेकिन इसके खिलाफ फैसला किया, क्योंकि आरजीबी स्लाइडर गैर-टचस्क्रीन फोन के लिए उपयोगी हो सकते हैं, मेरे ऐप को टचस्क्रीन की आवश्यकता होती है, और मैं किसी प्रकार का एचएसएल पिकर पसंद करूंगा। – tmandry