Android NumberPicker не сохраняет изменения EditText
Я скопировал виджет Android NumberPicker в свое приложение, но у меня есть одна проблема...
Когда кто-то вручную нажимает на EditText и меняет его с клавиатуры, выбор не сохраняется. Есть ли какой-нибудь прослушиватель, который я могу реализовать, чтобы проверить, может ли пользователь вручную изменить EditText, чтобы установить его как текущий? Или что-то?
Ответы
Ответ 1
Я нашел это решение потерянным где-то в группе google разработчиков Android:
Для виджета widroid SDK NumberPicker просто используйте:
myNumberPicker.clearFocus();
прежде чем пытаться получить его значение.
Когда у вас есть активность только с NumberPicker и, возможно, с помощью кнопки или spinner, и вы редактируете ее и пытаетесь щелкнуть в другом месте, ее onFocusChangedListener обрабатывается неправильно. Поэтому вам просто нужно заставить его потерять фокус перед использованием getValue(). Работала как шарм для меня.
Ответ 2
Я использовал набор чисел Майкла Новака. Хотя onEditorAction уже был реализован, он неправильно установил вход. Легким решением для меня было вызвать validateInput в textView в getCurrent.
/**
* @return the current value.
*/
public int getCurrent() {
validateInput(mText);
return mCurrent;
}
Ответ 3
У меня такая же проблема, используя numberpicker http://www.quietlycoding.com/?p=5, и я решил ее, добавив OnKeyListener (вместо этого OnEditorActionListener, который уже был предложен Junzi) на NumberPicker класс. Другие шаги такие же:
- Пусть NumberPicker.java расширяет OnKeyListener
- добавить mText.setOnKeyListener(this); в конструктор NumberPicker
- реализовать OnKey:
public boolean onKey(View v, int keyCode, KeyEvent event) {
validateInput(v);
return false;
}
Ответ 4
Если вы используете Android NumberPicker с Android4.0.x, вы можете получить значение NumberPicker с помощью getValue().
http://developer.android.com/reference/android/widget/NumberPicker.html#getValue()
Это простой способ получить Numberpicker в android 4.0.x...
final NumberPicker np = new NumberPicker(CustomizedListView.this);
np.setMinValue(0);
np.setMaxValue(100);
np.setWrapSelectorWheel(true);
И вы можете получить значение с помощью метода np.getValue().
Ответ 5
Вы можете попытаться установить TextWatcher в свой EditText, чтобы сделать то же самое или не позволить пользователю вводить значение вручную там...
Или сохраните кнопку OK и извлеките значения из EditText только тогда, когда пользователь нажимает кнопку OK
Пробовал ли вы этот образец?
http://www.quietlycoding.com/?p=5
Ответ 6
Не уверен, что вы используете тот же Numberpicker, что и мой: http://www.quietlycoding.com/?p=5. Я попытался добавить OnEditorActionListener в NumberClass, кажется, он решил проблему для меня.
- изменить NumberPicker.java, чтобы он расширил OnEditorActionListener.
- добавить mText.setOnEditorActionListener(this); в конструктор NumberPicker
-
реализовать onEditorAction:
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
validateInput(v);
return false;
}
Надеюсь, это будет полезно.