Подтвердить что ты не робот

Android NumberPicker не сохраняет изменения EditText

Я скопировал виджет Android NumberPicker в свое приложение, но у меня есть одна проблема...

Когда кто-то вручную нажимает на EditText и меняет его с клавиатуры, выбор не сохраняется. Есть ли какой-нибудь прослушиватель, который я могу реализовать, чтобы проверить, может ли пользователь вручную изменить EditText, чтобы установить его как текущий? Или что-то?

4b9b3361

Ответ 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;
    }
    

Надеюсь, это будет полезно.