在多个EditText上增加价值,并在每次文本更改时获得总计

时间:2019-01-25 08:45:24

标签: java android

如何不使用EditText而仅使用TextWatcher的Button方法求和多个onTextChanged()的总数。假设这是我的布局:

  

EditText1 = 5

     

EditText2 = 5

     

EditText3 = 5

     

EditText4 = 5

     

总数= 20

以此类推

并获得总数? EditText的值更改时,总数应为 CHANGING

我已阅读this的答案。但是我无法在程序上很好地执行它。

这是我的布局

enter image description here

2 个答案:

答案 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;

定义4个整数

然后,在编辑文本中添加单独的文本查看器,并在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方法处调用此函数以显示总金额。