首页 > 解决方案 > 输入两个值后,如何在第三个编辑文本中自动显示两个编辑文本值的结果?

问题描述

所以我有 3 个编辑文本,我想用前两个编辑文本的减去值填充第三个编辑文本。例如:在第一个编辑文本中有人输入 4,在第二个中有人输入 2,所以我想在第二个编辑文本填满后立即在第三个编辑文本中显示结果4 - 2 而不按 Enter或任何东西。

我的xml代码如下:

     <EditText
        android:id="@+id/epET"
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:layout_marginStart="32dp"
        android:layout_marginTop="32dp"
        android:layout_marginEnd="32dp"
        android:background="@drawable/et_back"
        android:backgroundTint="#000000"
        android:hint="@string/entry_price"
        android:inputType="numberDecimal"
        android:padding="8dp"
        android:textColor="#000000"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/toolbar" />

    <EditText
        android:id="@+id/stopET"
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:layout_marginStart="32dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="32dp"
        android:background="@drawable/et_back"
        android:backgroundTint="#000000"
        android:hint="@string/stoploss"
        android:inputType="numberDecimal"
        android:padding="8dp"
        android:textColor="#000000"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/epET" />

    <EditText
        android:id="@+id/rptET"
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:layout_marginStart="32dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="32dp"
        android:background="@drawable/et_back"
        android:backgroundTint="#000000"
        android:hint="@string/risk_per_trade_in_rs"
        android:inputType="numberDecimal"
        android:padding="8dp"
        android:textColor="#000000"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/stopET" />

我还没有尝试过任何事情,因为我不知道在这种情况下该怎么做。我正在使用Java

所以,请帮我解决这个问题。

标签: androidandroid-edittext

解决方案


正如评论中所建议的,您需要添加TextWatcher到您的EditText& 每当afterTextChanged被调用时,您都可以调用您的逻辑函数。

我为您的用例创建了一个示例。

public class MainActivity extends AppCompatActivity {

    EditText epET;
    EditText stopET;
    EditText rptET;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        epET = findViewById(R.id.epET);
        stopET = findViewById(R.id.stopET);
        rptET = findViewById(R.id.rptET);

        epET.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) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                calculate();

            }
        });

        stopET.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) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                calculate();
            }
        });

    }

    public void calculate() {
        String epText = epET.getText().toString().trim();
        String stopText = stopET.getText().toString().trim();

        if (epText.isEmpty() || stopText.isEmpty()) {
            rptET.setText("");
            return;
        }


        double ep = Double.parseDouble(epText);
        double stop = Double.parseDouble(stopText);

        double result = ep - stop;
        rptET.setText(String.valueOf(result));
    }


}

推荐阅读