android - 输入两个值后,如何在第三个编辑文本中自动显示两个编辑文本值的结果?
问题描述
所以我有 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。
所以,请帮我解决这个问题。
解决方案
正如评论中所建议的,您需要添加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));
}
}
推荐阅读
- excel - 将关闭的工作簿中的整列复制到打开的工作簿中
- c++ - 如何修复 IDA pro call analysis failed 错误?
- sympy - 有没有办法使用 SymPy 来解决这个问题?
- vb.net - VB.net 2019 Selenium 无法获取元素的字体颜色
- c - ARM Neon 内在函数,两个向量相加
- jenkins - 与 Jenkins 和 GHCR 合作;github 应用程序可以通过身份验证来推送 docker 映像吗?
- vue.js - 我无法从 ajax 结果加载 vue 动态组件
- python - 当其他列中的关联值重复时删除重复项
- r - 在 R 中重复的值的累积序列?
- android - Login时后台并发复制GC