EditTextPreference only numbers

Quickly share your Android Code Snippets here...

EditTextPreference only numbers

Postby IHeartAndroid » Mon Nov 16, 2009 3:44 pm

As long as there is no property for the EditTextPreference that is similar to the
Syntax: [ Download ] [ Hide ]
Using xml Syntax Highlighting
  1.  
  2. android:input_type="numberDecimal|numberSigned"
  3.  
  4.  
Parsed in 0.000 seconds, using GeSHi 1.0.8.4

of the EditText element, one can use the following:

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2. EditTextPreference myEditTextPreference = (EditTextPreference) findPreference("myPrefKey");
  3.  
  4.  
  5.  
  6.         myEditTextPreference
  7.  
  8.                         .setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
  9.  
  10.  
  11.  
  12.                                 @Override
  13.  
  14.                                 public boolean onPreferenceChange(Preference preference,
  15.  
  16.                                                 Object newValue) {
  17.  
  18.                                         try {
  19.  
  20.                                                 String input = newValue.toString();
  21.  
  22.                                                
  23.  
  24.                                                 if (containsOnlyNumbers(input)) {
  25.  
  26.                                                        
  27.  
  28.                                                         int result = Integer.parseInt(input);
  29.  
  30.                                                         if (result < 0) {
  31.  
  32.                                                                 result = 0;
  33.  
  34.                                                         }
  35.  
  36.                                                        
  37.  
  38.                                                         // Parsing was successful. Use the result..
  39.  
  40.                                                         // TODO                                                        
  41.  
  42.                                                        
  43.  
  44.  
  45.  
  46.                                                 } else {
  47.  
  48.                                                         Log.e(TAG, "Invalid value input '" + input
  49.  
  50.                                                                         + "', using old one");
  51.  
  52.                                                         return false;
  53.  
  54.                                                 }
  55.  
  56.                                         } catch (Exception e) {
  57.  
  58.                                                 e.printStackTrace();
  59.  
  60.                                                 return false;
  61.  
  62.                                         }
  63.  
  64.                                         return true;
  65.  
  66.                                 }
  67.  
  68.                         });
  69.  
  70.        
  71.  
  72.        
  73.  
  74.         private boolean containsOnlyNumbers(String s) {
  75.  
  76.                 if(s.length()<1) {
  77.  
  78.                         return false;
  79.  
  80.                 }
  81.  
  82.                 for (int i = 0; i < s.length(); i++) {
  83.  
  84.                         if (!Character.isDigit(s.charAt(i))) {
  85.  
  86.                                 return false;
  87.  
  88.                         }
  89.  
  90.                 }
  91.  
  92.                 return true;
  93.  
  94.         }
  95.  
  96.  
Parsed in 0.035 seconds, using GeSHi 1.0.8.4
User avatar
IHeartAndroid
Junior Developer
Junior Developer
 
Posts: 24
Joined: Wed Jul 08, 2009 8:51 am

Top

Other solution

Postby suemareverton » Wed Mar 31, 2010 12:51 pm

Hi...

Try this solution...

EditText myEditText = (EditText)myEditTextPreference.getEditText(); myEditText.setKeyListener(DigitsKeyListener.getInstance(false,true));

Suemar Éverton,
Presidente Prudente, Brazil.
suemareverton
Freshman
Freshman
 
Posts: 3
Joined: Wed Mar 31, 2010 12:43 pm
Location: Presidente Prudente, Brasil

Re: EditTextPreference only numbers

Postby jaykhimani » Thu Oct 28, 2010 11:36 pm

Thanks Suemar. It worked like a charm.

Cheers !!!
- Jay
jaykhimani
Once Poster
Once Poster
 
Posts: 1
Joined: Thu Oct 28, 2010 11:33 pm

Re: EditTextPreference only numbers

Postby luiz.lago » Sun Nov 20, 2011 1:58 pm

Hi,

You can make this way:
EditTextPreference prefEditText = (EditTextPreference) findPreference("YourItemPreference");
prefEditText.getEditText().setInputType(InputType.NUMBER);

Luiz lago
luiz.lago
Once Poster
Once Poster
 
Posts: 1
Joined: Sun Nov 20, 2011 1:53 pm

Re: EditTextPreference only numbers

Postby Nayanesh Gupte » Thu Jan 12, 2012 6:34 am

It crashes on pressing ok as it can not set integer value. :(

01-12 10:54:07.757: ERROR/AndroidRuntime(5687): java.lang.ClassCastException: java.lang.Integer
01-12 10:54:07.757: ERROR/AndroidRuntime(5687): at android.app.ContextImpl$SharedPreferencesImpl.getString(ContextImpl.java:2855)
01-12 10:54:07.757: ERROR/AndroidRuntime(5687): at android.preference.Preference.getPersistedString(Preference.java:1249)
01-12 10:54:07.757: ERROR/AndroidRuntime(5687): at android.preference.Preference.persistString(Preference.java:1218)
01-12 10:54:07.757: ERROR/AndroidRuntime(5687): at android.preference.EditTextPreference.setText(EditTextPreference.java:88)
01-12 10:54:07.757: ERROR/AndroidRuntime(5687): at android.preference.EditTextPreference.onDialogClosed(EditTextPreference.java:142)
01-12 10:54:07.757: ERROR/AndroidRuntime(5687): at android.preference.DialogPreference.onDismiss(DialogPreference.java:384)
01-12 10:54:07.757: ERROR/AndroidRuntime(5687): at android.app.Dialog$ListenersHandler.handleMessage(Dialog.java:1047)
01-12 10:54:07.757: ERROR/AndroidRuntime(5687): at android.os.Handler.dispatchMessage(Handler.java:99)
01-12 10:54:07.757: ERROR/AndroidRuntime(5687): at android.os.Looper.loop(Looper.java:123)
01-12 10:54:07.757: ERROR/AndroidRuntime(5687): at android.app.ActivityThread.main(ActivityThread.java:4627)
01-12 10:54:07.757: ERROR/AndroidRuntime(5687): at java.lang.reflect.Method.invokeNative(Native Method)
01-12 10:54:07.757: ERROR/AndroidRuntime(5687): at java.lang.reflect.Method.invoke(Method.java:521)
01-12 10:54:07.757: ERROR/AndroidRuntime(5687): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871)
01-12 10:54:07.757: ERROR/AndroidRuntime(5687): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)
01-12 10:54:07.757: ERROR/AndroidRuntime(5687): at dalvik.system.NativeStart.main(Native Method)
Nayanesh Gupte
Once Poster
Once Poster
 
Posts: 1
Joined: Thu Jan 12, 2012 6:27 am

Top

Return to Code Snippets for Android

Who is online

Users browsing this forum: No registered users and 5 guests