I’m working on an Android application that requires a NumberPicker widget, the widget behind the DatePicker. Luckily, I’m not the only one and QuietlyCoding shows us how to clone and use the NumberPicker widget.
Then I started using the NumberPicker and I found out that not all is working as I would like to see. There are 2 things bugging me:
- Entering numbers via the EditText (mText widget) do not stick. The mCurrent variable is not updated.
- Variables are entered twice, entering a ‘2’ via the EditText widgets results in ’22’ being displayed.
I’m not sure yet what to do but I think I need to write my own NumberPicker or update the existing one, one that
- looks like the real NumberPicker widget.
- Behaves like the real NumberPicker (well… partly).
- Accepts data from the EditText widget.
- Does not use the ‘mDisplayedValues’. (I think this is implemented to support the DatePicker)
I added 2 changes to the NumberPicker to disable manual entry:
1) Added the following lines to ‘OnCreate()’ in NumberPicker.java, just below
mText.setRawInputType(InputType.TYPE_CLASS_NUMBER);
:mText.setInputType(0); //See http://code.google.com/p/android/issues/detail?id=7115
mText.setEnabled(false); // Disable the EditText widget.
2) Updated the
setEnabled()
member. I replacedmText.setEnabled(enabled)
withmText.setEnabled(false)
Both changes make sure that the user cannot enter a value manually, he/she has to use the ‘+’ and ‘-‘ button. My problem with the NumberPicker is that the value is only stored when the user hits enter after manually entering a value. I want the entry to be used without hitting the enter key. Just try it for yourself, enter a value and press ‘+’ or ‘-‘.
I’m also running into the problem of the values not sticking when manually editing the EditText field. However, I WANT my users to have the option of doing this.
Have you found out a solution?
In addition the NumberPicker dialog seems to use the displayed values as long as it is set with setRange(int start, int end, String[] dispvalues) or whatever. Let me know if you have any questions.
@Fran Fitzpatrick
Old post I know – but maybe help for others.
A quick easy win to the ‘edit text not sticking’ problem
When you get the result – don’t call the ‘getCurrent()’ method.
Interrogate the field directly
i.e.
EditText number = (EditText) dialog .findViewById(R.id.timepicker_input);
int myNewNumber = Integer.parseInt(number.getText()
.toString()));
Hope that helps
I have tried to add a OnEditorActionListener to the NumberClass, seems it solved the problem for me.
– modify the NumberPicker.java let it extends OnEditorActionListener.
– add **mText.setOnEditorActionListener(this);** to NumberPicker constructor
– implement **onEditorAction**:
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
validateInput(v);
return false;
}
Hope it can be helpful.
Great, this is helpfull. Thanks
This post is a extraordinarily gracious one. Thank for stakeing such great information out. Ill deff be driving by more often so i an take in whats informative!