2014-11-26 3 views
3

Я создал InputFilter для компонента EditText, который допускает только удвоения в пределах диапазона (например, от 1,5 до 5,5). Все работало нормально, пока я не удалил десятичную точку:Android: обратная связь на InputFilter

Я набрал 1.68 и затем удалил десятичную точку. Значение в текстовом поле стало 168, что явно выходит за пределы диапазона.

Вот упрощенная версия моего фильтра

public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { 
     if (isValid(dest.toString() + source.toString())) { 
      //input is valid 
      return null; 
     }else{ 
      //The input is not valid 
      return ""; 
     } 
} 
private boolean isValid(String input) { 
    Double inputValue = Double.parseDouble(input); 
    boolean isMinValid = (1.5 <= inputValue); 
    boolean isMaxValid = (5.5 >= inputValue); 

    return isMinValid && isMaxValid; 
} 

ответ

6

Я решил свою проблему. Вот решение в случае, если кто-то нуждается в этом:

public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { 
    if (isValid(dest.toString() + source.toString())) { 
     //input is valid 
     return null; 
    }else{ 
     //The input is not valid 
     if (source.equals("") && dest.toString().length() != 1) { 
      //backspace was clicked, do not accept that change, 
      //unless user is deleting the last char 
      CharSequence deletedCharacter = dest.subSequence(dstart, dend); 
      return deletedCharacter; 
     } 
     return ""; 
    } 

}

0

После завершения ввода данных в тексте редактирования, вы должны вызвать зная, что вы закончили ввод данных и теперь должны проверить ввод. Например, добавив кнопку ввода теста или, например, когда текстовое поле редактирования теряет фокус.

+0

Это будет работать, но я хотел бы сделать это автоматически. Я отправлю решение в ближайшее время. – user2287966

Смежные вопросы