我在底部有多个edittext
和一个textview
,以便得到edittexts
中所写内容的总和,但我没有成功。我尝试了TextWatcher
,但它没有完成工作,例如我在第一个5中写,而在第二个10中我得到16因为它计算5 + 1 + 10。我还尝试了onfocus
方法,但问题仍然是最后一个edittext
,它不会更新结果。我真的不知道该怎么办。以前有人有这个问题吗?
TextWatcher实现:
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 :(得分: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
。
<强>逻辑强>
在应用任何文字更改之前, beforeTextChanged
会调用。就像你输入 5 一样,它会返回“”,因为没有数据,那么如果你输入 2 ,它会返回 5 < / strong>正如之前输入的那样。所以这就是诀窍。
在添加任何值之前,只需从前一个值中减去它。否则你的逻辑是真的。但每次你在答案中添加数字。这使你的答案变得虚假。
<强>效益强>
现在,如果你使用这个逻辑,那里有多少EditText
。这将提供真实的答案。您只需要为每个EditText添加TextWatcher
。
答案 1 :(得分:0)
让我们说 - editText1 - firstNumber&amp; editText2- secondNumber
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) {
}
};