我在底部有多个 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) {
}
};
最佳答案
使用以下代码。我已经对其进行了测试并像魅力一样工作..
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 因为它是之前输入的。所以这就是诀窍。
在添加任何值之前,只需从前一个值中减去它。否则你的逻辑是正确的。但每次你在回答中添加数字。这使您的答案错误。
好处
现在,如果您使用此逻辑,那么那里有多少 EditText
都没有关系。这将提供真实的答案。您只需将 TextWatcher
添加到每个 EditText。
关于android - 如何在android中输入编辑文本时更新 TextView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18721231/