Как я могу изменить ввод нескольких EditTexts одновременно, если я изменяю только один? - PullRequest
0 голосов
/ 30 мая 2020

У меня несколько EditTexts, и я хочу изменить ввод всех из них одновременно, так как я изменяю только один. (Все они принимают десятичные числа в качестве входных)

Я сохранил EditTexts в массив с именем 'editTexts'.

Вот что я пробовал

//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) {

            }
        })
    }

В этом случае коэффициент умножения является всего лишь примером, он не всегда будет 2. Я использовал его только для проверки его нет.

По какой-то причине, когда я меняю входное значение, приложение зависает.

Есть помощь? Спасибо!

Ответы [ 2 ]

2 голосов
/ 30 мая 2020

Попробуйте вот так:

// 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) {

    }
});

Надеюсь, это вам поможет!

2 голосов
/ 30 мая 2020

Используйте LiveData для хранения значений, введенных пользователем. После изменения значения вы можете установить значение для каждого EditText. Думаю, это простой способ реализовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...