2013-09-10 2 views
3

У меня есть несколько edittext и textview внизу, чтобы получить сумму того, что написано в edittexts, но я не преуспел. Я пробовал TextWatcher, но он не выполняет эту работу, например, я пишу в первой версии 5, а во втором 10 я получил 16 в результате, когда он насчитывает 5 + 1 + 10. Я также пробовал метод onfocus, но проблема с последним edittext не обновляет результат. Я действительно не знаю, что делать. У кого-то была эта проблема раньше? Реализация TextWatcher:Как обновить текст при вводе текста edroid в андроиде

TextWatcher inputTextWatcher1 = new TextWatcher() { 
      public void afterTextChanged(Editable s) { 
       number = Integer.parseInt(s.toString()); 
       sum+=number; 
       tv.setText("sum is "+sum); 

} 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, 
        int after) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onTextChanged(final CharSequence s, int start, int before, 
        int count) { 

      } 

     }; 
+0

Можете ли вы разместить здесь реализацию TextWatcher? –

+0

Я отредактировал мой вопрос – user2137817

+0

Проверьте мой ответ. Я проверил его и работал как шарм .. :) –

ответ

4

Используйте следующий код. Я проверил это и работает как шарм ..

et1.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void onTextChanged(CharSequence s, int start, int before, 
      int count) { 

    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, 
      int after) { 
     if (s.length() > 0) { 
      int number = Integer.parseInt(s.toString()); 
      ans -= number; 
     } 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     int number = Integer.parseInt(s.toString()); 
     ans += number; 
     txtOutput.setText("sum is " + ans); 
    } 
}); 

et2.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void onTextChanged(CharSequence s, int start, int before, 
      int count) { 

    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, 
      int after) { 
     if (s.length() > 0) { 
      int number = Integer.parseInt(s.toString()); 
      ans -= number; 
     } 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     int number = Integer.parseInt(s.toString()); 
     ans += number; 
     txtOutput.setText("sum is " + ans); 
    } 
}); 

Здесь ans должны быть 0 перед использованием. et1 и et2: EditText.

Logic

beforeTextChanged позвонит перед любыми изменениями текста применяются. Как вы типа , то он возвращает «», как нет данных, то если вы наберете , он возвращает , как оно было введено ранее. Так что это трюк.

Прежде чем добавлять какое-либо значение, просто вычтите его из предыдущего. В противном случае ваша логика верна. но каждый раз, когда вы добавляете номер в ответ. Что делает ваш ответ ложным.

Benefit

Теперь, если вы используете эту логику, то не имеет значения, сколько EditText там. Это даст правильный ответ. Вам просто нужно добавить TextWatcher в каждый EditText.

+1

YOU SIR спас мой день! Спасибо !! – user2137817

+0

@ user2137817, рад помочь .. Upvote будет большим удовольствием ... –

+1

@ChintanRathod, +1 от меня. Неплохо. :) –

0

Позволяет сказать - editText1 - firstNumber & editText2-

второе число
TextWatcher inputTextWatcher1 = new TextWatcher() { 
      public void afterTextChanged(Editable s) { 
       number1 = Integer.parseInt(editText1.getText().toString()); 
       number2 = Integer.parseInt(editText2.getText().toString()); 
       sum = number1 + number2; 
       tv.setText("sum is "+sum); 

    } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, 
        int after) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onTextChanged(final CharSequence s, int start, int before, 
        int count) { 

      } 

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