1

I multiplied the values in two edittext et_weight and et_rate and got result in the other edittext.Now i want to divide et_freight and et_weight to get result in et_rate when i change value in et_freight.Can anyone suggest a method

      et_weight.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                }

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

                    if (!et_rate.getText().toString().equals("") && !et_weight.getText().toString().equals("")) {
                        et_freight.setText(String.valueOf(Integer.valueOf(et_weight.getText().toString()) * Integer.valueOf(et_rate.getText().toString())));
                    }

                }

                @Override
                public void afterTextChanged(Editable s) {

                }
            });
            et_rate.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                }

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

                    if (!et_rate.getText().toString().equals("") && !et_weight.getText().toString().equals("")) {
                        et_freight.setText(String.valueOf(Integer.valueOf(et_weight.getText().toString()) * Integer.valueOf(et_rate.getText().toString())));
                    }

                }

                @Override
                public void afterTextChanged(Editable s) {

                }
            });

    et_freight.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (!et_freight.getText().toString().equals("") && !et_weight.getText().toString().equals("")) {
                et_rate.setText(String.valueOf(Integer.valueOf(et_freight.getText().toString()) / Integer.valueOf(et_weight.getText().toString())));
            }

        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });
R.Anjali
  • 181
  • 1
  • 9

1 Answers1

0

You could do this by checking if the EditText is focused before changing it's value. For example the first condition:

if (et_weight.isFocused() && !et_rate.getText().toString().equals("") && !et_weight.getText().toString().equals("")) {

Also, to simplify your code you can create some helper methods like these:

private void updateDivide(){
    int weight = Integer.valueOf(et_weight.getText().toString());
    int freight = Integer.valueOf(et_freight.getText().toString());
    et_rate.setText(String.valueOf(freight / weight));
}

private void updateMultiply(){
    int weight = Integer.valueOf(et_weight.getText().toString());
    int rate = Integer.valueOf(et_rate.getText().toString());
    et_freight.setText(String.valueOf(weight * rate));
}

private boolean isSet(EditText editText){
    return !editText.getText().toString().matches("");
}

And then use it in your code like this:

et_weight.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged (CharSequence s,int start, int count, int after){

    }

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

        if (et_weight.isFocused() && isSet(et_weight) && isSet(et_rate)) {
            updateMultiply();
        }

    }

    @Override
    public void afterTextChanged (Editable s){

    }
});

et_rate.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged (CharSequence s,int start, int count, int after){

    }

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

        if (et_rate.isFocused() && isSet(et_rate) && isSet(et_weight)) {
            updateMultiply();
        }

    }

    @Override
    public void afterTextChanged (Editable s){

    }
});

et_freight.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged (CharSequence s,int start, int count, int after){

    }

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

        if (et_freight.isFocused() && isSet(et_weight) && isSet(et_freight)) {
            updateDivide();
        }

    }

    @Override
    public void afterTextChanged (Editable s){

    }
});
megaturbo
  • 680
  • 6
  • 24