2011-02-08 2 views
3

У меня есть текст редактирования. Я хочу ввести в него десятичные значения.Задача DecimalFormat бросает StackOverFlowError?

это, когда у меня есть первый номер. это должно быть примерно так: .01

то у меня есть второе число. это должно быть следующим: .12

затем для третьего. это должно быть так: 1.23

все будет как это .... как реализовать этот сценарий в платформе Android . Есть идеи?

Edit:

Я попытался this.But я получил StackOverflowError когда я Добавляя строку в EditText. я отправил свой код ниже:

amount.addTextChangedListener(new TextWatcher() { 
      public void afterTextChanged(Editable s) { 
       try { 
        if (s.length() == 1) { 
         Float f = Float.parseFloat(s.toString())/100; 
         System.out.println(String.valueOf(f)); 
         amount.setText(""); 
         amount.append(String.valueOf(f));//getting stackoverflow error here 
        } else if (s.length() > 1) { 
         String str = s.toString().replace(".", ""); 
         Float f = Float.parseFloat(str)/100; 
         System.out.println(String.valueOf(f)); 
         amount.setText(""); 
         amount.append(String.valueOf(f)); 
        } 
       } catch (Exception e) { 

       } 
      } 

      public void beforeTextChanged(CharSequence s, int start, int count, 
        int after) { 
      } 

      public void onTextChanged(CharSequence s, int start, int before, 
        int count) { 
      } 
     }); 
+0

@DroidBase: какую технологию вы используете в java? Andriod? Свинг? JSP/HTML? или любой другой? в вашем вопросе нужно больше объяснений. –

+0

Я использую edittext в платформе Android. – Praveen

+1

@DroidBase: вы должны упомянуть об этом в своем вопросе. по крайней мере, вы должны добавить тег android в свой вопрос. –

ответ

1

Посмотрите, вы реализуете TextChangedKListener для элемента, в котором изменяемого элемента текста.

Таким образом, в этой линии

amount.setText(""); 
amount.append(String.valueOf(f)) 

ваша реализация TextWatcher вызывается (как вы можете видеть here и here).

Как вы можете видеть на второй линии, в API док для метода afterTextChanged, предупреждает вас о риске попадания в бесконечные циклы:

быть осторожным, чтобы не получить себе в бесконечный цикл, так как любые изменения будут вызывать этот метод будет называться снова рекурсивно

описание само afterTextChanged на API док TextWatcher рекомендует обходной путь для работы с этим:

Не указано, где произошло изменение , потому что другие методы afterTextChanged() могут уже сделать другие изменениями и аннулированными смещениями. Но если вам нужно знать здесь, вы можете использовать setSpan (Object, Int, Int, Int) в OnTextChanged (CharSequence, Int, Int, целое), чтобы отметить свое место, а затем посмотреть отсюда, где пробел закончился.

+0

@Thomas: В любом случае, чтобы достичь этого scneario? – Praveen

+0

@DroidBase: отредактирован, чтобы добавить стратегию, рекомендованную API. Я действительно не знаю, насколько хорошо эта работа, поскольку мне еще не нужно было делать что-то подобное –

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