2010-07-08 22 views
37

मैं क्या करना चाहता हूं कि मैं जीवन कार्यक्रम के खेल पर काम कर रहा हूं। मैं समय देरी लेना चाहता हूं और इसे प्राथमिकता देना चाहता हूं, लेकिन मैं इसे लोगों के लिए एक विशिष्ट समय में टाइप करना चाहता हूं। संख्या मिलीसेकंड या सेकंड में हो सकती है।एंड्रॉइड में वरीयता गतिविधि में संख्या प्राथमिकता

हालांकि मैं आगे बढ़ने के तरीके पर थोड़ा फंस गया हूं, मुझे एक साधारण प्राथमिकता नहीं मिली है जो पहले से ही इसे संभालती है, लेकिन एक हो सकता है। क्या इस वरीयता को बनाने का एक आसान तरीका है और पुष्टि करें कि दर्ज डेटा एक पूर्णांक या afloat है?

उत्तर

16

यदि आप वरीयता सक्रियता का उपयोग कर रहे हैं जो आप शायद हैं, तो कोई भी उपलब्ध नहीं है।

आप कुछ इस तरह करने की आवश्यकता होगी:

/** 
* Checks that a preference is a valid numerical value 
*/ 
Preference.OnPreferenceChangeListener numberCheckListener = new OnPreferenceChangeListener() { 

    @Override 
    public boolean onPreferenceChange(Preference preference, Object newValue) { 
     //Check that the string is an integer. 
     return numberCheck(newValue); 
    } 
}; 

private boolean numberCheck(Object newValue) { 
    if(!newValue.toString().equals("") && newValue.toString().matches("\\d*")) { 
     return true; 
    } 
    else { 
     Toast.makeText(ActivityUserPreferences.this, newValue+" "+getResources().getString(R.string.is_an_invalid_number), Toast.LENGTH_SHORT).show(); 
     return false; 
    } 
} 


    @Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    //get XML preferences 
    addPreferencesFromResource(R.xml.user_preferences); 


    //get a handle on preferences that require validation 
    delayPreference = getPreferenceScreen().findPreference("pref_delay"); 

    //Validate numbers only 
    delayPreference.setOnPreferenceChangeListener(numberCheckListener); 

} 
+0

केवल मुद्दा delayPreference उदाहरण (यह एक पसंद मैं जानता हूँ कि है) में परिभाषित नहीं है इसके अलावा इस वरीयता गतिविधि वर्ग के अंदर के लिए कोड है, लेकिन अच्छी तरह से काम करने लगता है, तुम बहुत धन्यवाद बहुत। – Kinglink

81

एक EditTextPreference का प्रयोग करें और TYPE_CLASS_NUMBER के लिए इनपुट प्रकार निर्धारित किया है। यह उपयोगकर्ता को नंबर दर्ज करने के लिए मजबूर करेगा, न कि पत्र।

EditTextPreference pref = (EditTextPreference)findPreference("preference_name"); 
pref.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER); 
+9

यह एक काम करता है और इस सवाल का जवाब होना चाहिए। हालांकि उपयोगकर्ता को डॉट, कोमा और अन्य मान प्रदर्शित होते हैं, लेकिन उपयोगकर्ता ** ** उन्हें सम्मिलित नहीं कर सकता। तो आप इससे केवल इनपुट प्राप्त करते हैं जो संख्यात्मक है। –

+26

एक्सएमएल के साथ काम करते समय आप 'एंड्रॉइड: इनपुट टाइप =" संख्या "का भी उपयोग कर सकते हैं। – tslocum

37

तुम भी XML विशेषता android:numeric के साथ लागू कर सकते हैं। इस विशेषता के लिए संभावित प्रासंगिक मान decimal और integer हैं।

+1

'EditTextPreference' में पैरामीटर' न्यूमेरिक 'नहीं है। –

+8

@SYLARRR यह करता है। 'EditTextPreference'' EditText' के सभी विशेषताओं का समर्थन करता है। और मैं अपनी परियोजना में इस विशेषता का उपयोग कर रहा हूं। – HRJ

+2

इसने मुझे एक * बहुत * परेशानी बचाई है - बहुत धन्यवाद – bph

28

आप इसे सीधे अपने preferences.xml में भी कर सकते हैं। कुछ इस तरह काम करेगा:

<EditTextPreference 
    android:defaultValue="100" 
    android:dialogTitle="@string/pref_query_limit" 
    android:inputType="number" 
    android:key="pref_query_limit" 
    android:summary="@string/pref_query_limit_summ" 
    android:title="@string/pref_query_limit" /> 
संबंधित मुद्दे