Raul Potor
Raul Potor

Reputation: 29

How can I modify the input of multiple EditTexts at the same time, as I only modify one?

I have multiple EditTexts and I want to change the input of all of them at the same time, as I modify only one.(all of them take decimal numbers as input)

I stored the EditTexts in an array named 'editTexts'.

Here's what I tried

//Set the listener for each element
for (int i=0; i<editTexts.length; i++) {
        final int finalI = i;
        editTexts[i].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 the editText which is currently edited is empty, set the input for all the rest to be '0.0'
                if (editTexts[finalI].getText().toString().trim().length() == 0) {
                    for(EditText e : editTexts) {
                        if (e == editTexts[finalI])
                            continue;
                        e.setText("0.0");
                    }
                } else {
                    float no = Float.parseFloat(s.toString() + "");
//Set the input of all the other editTexts to be the decimal number entered, multiplied by 2
                    for(EditText e : editTexts){
                        if(e == editTexts[finalI])
                            continue;
                        e.setText(no*2+"");
                    }
                }
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        })
    }

In this case the multiplication coefficient is just an example, it's not always gonna be 2. I used it just to test it out.

For some reason, when I change the input value, the app freezes.

Any help? Thanks!

Upvotes: 0

Views: 177

Answers (2)

Ronak Sethi
Ronak Sethi

Reputation: 627

Try it like this:

// et_x1, et_x2 and et_x3 are ids of EditTexts
//set inputType for all EditTexts as numberDecimal

EditText editText1 = findViewById(R.id.et_x1);
final EditText editText2 = findViewById(R.id.et_x2);
final EditText editText3 = findViewById(R.id.et_x3);


editText1.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) {
        String value = s.toString();
        double x;
        if (!value.equals("")) {
            x = Double.parseDouble(value);
        } else {
            x = 0.0;
        }
        editText2.setText(Editable.Factory.getInstance().newEditable((String.valueOf(Math.pow(x, 2)))));
        editText3.setText(
                Editable.Factory.getInstance().newEditable((String.valueOf(Math.pow(x, 3)))));
    }

    @Override
    public void afterTextChanged(Editable s) {

    }
});

Hope it helps you!

Upvotes: 2

Kaung Htet Lin
Kaung Htet Lin

Reputation: 21

Use LiveData to store your user input values. Once it's value changes you can set value to each EditText. I think it is an easy way to implement.

Upvotes: 2

Related Questions