क्या किसी के पास प्राथमिकता में उपयोगकर्ता दर्ज टेक्स्ट को सत्यापित करने के लिए नमूना कोड है? उदाहरण के लिए, मेरे पास एक ईमेल पता दर्ज करने के लिए उपयोगकर्ता के लिए EditTextPreference है। मैं दर्ज ईमेल पते के प्रारूप को सत्यापित करना चाहता हूं और प्रारूप सही नहीं है, तो एक चेतावनी संवाद पॉप अप करना चाहता हूं। किसी के पास इसके लिए कोई नमूना कोड है? धन्यवादएंड्रॉइड 2.1 में दर्ज EditTextPreference के प्रारूप और मानों को आप कैसे सत्यापित करते हैं?
उत्तर
लागू Preference.OnPreferenceChangeListener
बूलियन onPreferenceChange (पसंद वरीयता, newValue वस्तु)
कहा जाता है जब एक पसंद उपयोगकर्ता द्वारा बदल दिया गया है। वरीयता की स्थिति को अद्यतन करने के पहले और राज्य जारी होने से पहले इसे कहा जाता है।
नए मूल्य के साथ वरीयता की स्थिति को अद्यतन करने के लिए सच है।
तो आप सीधे मूल्य सत्यापन का परिणाम वापस कर सकते हैं।
public class Preferences extends PreferenceActivity implements OnSharedPreferenceChangeListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
findPreference("mail_preference_key").setOnPreferenceChangeListener(
new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
return Pattern.matches("mailPattern", (String) newValue);
}
});
}
}
मैं Preference.OnPreferenceChangeListener
बजाय SharedPreferences.OnSharedPreferenceChangeListener
का उपयोग करेंगे।
पूर्व आपको इसे जारी रखने से पहले नए मूल्य को सत्यापित करने की अनुमति देता है (और इसे जारी रखने से रोकता है)।
जब आपका प्रश्न एक ही काम करने की कोशिश कर रहा था, तो आपका प्रश्न शुरुआती Google हिट था, इसलिए उम्मीद है कि यह किसी की मदद करेगा। यहां कुछ ऐसा है जो मैंने आज एक साथ हैक किया है जो OnPreferenceChangeListener को प्रदर्शित करता है, इस प्रकार आप अमान्य परिवर्तनों को रोकने की अनुमति देते हैं।
अपने टुकड़ा में:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
Your_Pref = (EditTextPreference) getPreferenceScreen().findPreference("Your_Pref");
Your_Pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
Boolean rtnval = true;
if (Your_Test) {
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Invalid Input");
builder.setMessage("Something's gone wrong...");
builder.setPositiveButton(android.R.string.ok, null);
builder.show();
rtnval = false;
}
return rtnval;
}
});
}
मैं निम्नलिखित कोड: \t \t अगर (key.equals ("update_delay")) { \t \t \t स्ट्रिंग NEWVALUE = sp.getString (कुंजी, नल) ; ।। \t \t \t अगर (Integer.parseInt (NEWVALUE) <60) \t \t \t \t sp.edit() putString ("update_delay", "60") प्रतिबद्ध(); } और अगली बार जब मैं EditTextPreference पर क्लिक करता हूं तो यह अभी भी कम मान दिखाता है। क्या आप जानते हैं कि प्रतिबद्ध() इस संदर्भ में काम नहीं करता है? – sargas
मुझे यकीन नहीं है, लेकिन प्रतिबद्ध विधि संदर्भ में 1. ध्यान दें कि जब दो संपादक एक ही समय में वरीयताओं को संशोधित कर रहे हैं, तो कॉल करने के लिए अंतिम व्यक्ति जीतता है। 2. यदि नए मान सफलतापूर्वक भंडारण के लिए सफलतापूर्वक लिखे गए हैं तो सत्य वापस आ जाता है। प्वाइंट 1: शायद उपयोगकर्ता संपादक अंतिम कॉल करता है। प्वाइंट 2: जांचें कि क्या प्रतिबद्ध वापसी सही है। इस सहायता की आशा करें। – Fede
क्या परिवर्तन के बाद इसे बुलाया नहीं जाता है? मुझे लगता है कि @Aaron का सही जवाब है। – iozee