2010-03-29 11 views
13

क्या किसी के पास प्राथमिकता में उपयोगकर्ता दर्ज टेक्स्ट को सत्यापित करने के लिए नमूना कोड है? उदाहरण के लिए, मेरे पास एक ईमेल पता दर्ज करने के लिए उपयोगकर्ता के लिए EditTextPreference है। मैं दर्ज ईमेल पते के प्रारूप को सत्यापित करना चाहता हूं और प्रारूप सही नहीं है, तो एक चेतावनी संवाद पॉप अप करना चाहता हूं। किसी के पास इसके लिए कोई नमूना कोड है? धन्यवादएंड्रॉइड 2.1 में दर्ज EditTextPreference के प्रारूप और मानों को आप कैसे सत्यापित करते हैं?

उत्तर

10

लागू 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); 
      } 

     }); 
    } 
} 
+0

मैं निम्नलिखित कोड: \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

+0

मुझे यकीन नहीं है, लेकिन प्रतिबद्ध विधि संदर्भ में 1. ध्यान दें कि जब दो संपादक एक ही समय में वरीयताओं को संशोधित कर रहे हैं, तो कॉल करने के लिए अंतिम व्यक्ति जीतता है। 2. यदि नए मान सफलतापूर्वक भंडारण के लिए सफलतापूर्वक लिखे गए हैं तो सत्य वापस आ जाता है। प्वाइंट 1: शायद उपयोगकर्ता संपादक अंतिम कॉल करता है। प्वाइंट 2: जांचें कि क्या प्रतिबद्ध वापसी सही है। इस सहायता की आशा करें। – Fede

+1

क्या परिवर्तन के बाद इसे बुलाया नहीं जाता है? मुझे लगता है कि @Aaron का सही जवाब है। – iozee

2

मैं Preference.OnPreferenceChangeListener बजाय SharedPreferences.OnSharedPreferenceChangeListener का उपयोग करेंगे।

पूर्व आपको इसे जारी रखने से पहले नए मूल्य को सत्यापित करने की अनुमति देता है (और इसे जारी रखने से रोकता है)।

9

जब आपका प्रश्न एक ही काम करने की कोशिश कर रहा था, तो आपका प्रश्न शुरुआती 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; 
      } 
     }); 
    }