如何不使用EditText
而仅使用TextWatcher的Button
方法求和多个onTextChanged()
的总数。假设这是我的布局:
EditText1 = 5
EditText2 = 5
EditText3 = 5
EditText4 = 5
总数= 20
以此类推
并获得总数? EditText
的值更改时,总数应为 CHANGING 。
我已阅读this的答案。但是我无法在程序上很好地执行它。
这是我的布局
答案 0 :(得分:2)
您需要使用 TextWatcher()
您可以仅使用一个TextWatcher()
来代替使用5 TextWatcher()
尝试
在下面的答案中,如果您所有的四个四edittext
都不为空,那么它将计算editext
值的总和
public class MainActivity extends AppCompatActivity {
EditText edtOne, edtTwo, edtThree, edtFour;
TextView tvResult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edtOne = findViewById(R.id.edtOne);
edtTwo = findViewById(R.id.edtTwo);
edtThree = findViewById(R.id.edtThree);
edtFour = findViewById(R.id.edtFour);
tvResult = findViewById(R.id.tvResult);
edtOne.addTextChangedListener(textWatcher);
edtTwo.addTextChangedListener(textWatcher);
edtThree.addTextChangedListener(textWatcher);
edtFour.addTextChangedListener(textWatcher);
}
TextWatcher textWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (!TextUtils.isEmpty(edtOne.getText().toString().trim())
|| !TextUtils.isEmpty(edtTwo.getText().toString().trim())
|| !TextUtils.isEmpty(edtThree.getText().toString().trim())
|| !TextUtils.isEmpty(edtFour.getText().toString().trim())
) {
int answer = Integer.parseInt(edtOne.getText().toString().trim()) +
Integer.parseInt(edtTwo.getText().toString().trim()) +
Integer.parseInt(edtThree.getText().toString().trim()) +
Integer.parseInt(edtFour.getText().toString().trim());
Log.e("RESULT", String.valueOf(answer));
tvResult.setText(String.valueOf(answer));
}else {
tvResult.setText("");
}
}
@Override
public void afterTextChanged(Editable editable) {
}
};
}
如果您要计算所有editext
的值,即使您的editext为空,也可以尝试在下面的 TextWatcher()
TextWatcher textWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (!TextUtils.isEmpty(edtOne.getText().toString().trim())
|| !TextUtils.isEmpty(edtTwo.getText().toString().trim())
|| !TextUtils.isEmpty(edtThree.getText().toString().trim())
|| !TextUtils.isEmpty(edtFour.getText().toString().trim())
) {
int firtValue = TextUtils.isEmpty(edtOne.getText().toString().trim()) ? 0 : Integer.parseInt(edtOne.getText().toString().trim());
int secondValue = TextUtils.isEmpty(edtTwo.getText().toString().trim()) ? 0 : Integer.parseInt(edtTwo.getText().toString().trim());
int thirdValue = TextUtils.isEmpty(edtThree.getText().toString().trim()) ? 0 : Integer.parseInt(edtThree.getText().toString().trim());
int forthValue = TextUtils.isEmpty(edtFour.getText().toString().trim()) ? 0 : Integer.parseInt(edtFour.getText().toString().trim());
int answer = firtValue + secondValue + thirdValue + forthValue;
Log.e("RESULT", String.valueOf(answer));
tvResult.setText(String.valueOf(answer));
}else {
tvResult.setText("");
}
}
@Override
public void afterTextChanged(Editable editable) {
}
};
答案 1 :(得分:1)
我将告诉您如何执行此操作,但我不会将解决方案作为总代码发布。
首先,定义整数,即您的编辑文本数。如果有4个编辑文本,请使用int first = 0, second = 0, third = 0, fourth = 0;
然后,在编辑文本中添加单独的文本查看器,并在afterTextChanged
方法上,使用Integer.parseInt(Editable s.getText.toString())
从字符串中获取整数值,并确保输入是可转换的,否则您将获得NumberFormatException
。然后,将此值分配给相关的编辑文本,例如在您的第一个编辑文本上,使用first = Integer.parse(s.getText().toString())
。
创建一个使用这些变量在textview上显示的函数。例如:
private void showResult() {
textView.setText(String.valueOf(first + second + third + fourth));
}
然后,在每个afterTextChanged方法处调用此函数以显示总金额。