java - EditText On update/onChange value 添加监听器
问题描述
我的活动中有 2 个 EditText,比如说editText1
,editText2
和一个双变量d=200
我希望当用户更改/插入值时editText1
,editText2
值将实时更新为editText1*d
此外,当用户更改/插入 editText2 的值时,editText1 将实时更新为editText2*d
我尝试使用addTextChangedListener->onTextChanged
但它适用于一个编辑文本,当我为两个editText设置此功能然后应用程序崩溃时,因为它创建了一个无限循环,我该如何解决这个问题?
更新:下面是我的代码
et1.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) {
Editable a = et1.getText();
Double aa = Double.parseDouble(a.toString())*100;
String aaa = aa.toString();
et2.setText(aaa);
}
@Override
public void afterTextChanged(Editable s) {
}
});
et2.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) {
Editable b=et2.getText();
Double bb=Double.parseDouble(b.toString());
String bbb=bb.toString();
et1.setText(bbb);
}
@Override
public void afterTextChanged(Editable s) {
}
});
解决方案
编辑文本 et1, et2;
TextWatcher watcher1 = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
Editable a = et1.getText();
Double aa = Double.parseDouble(a.toString())*100;
String aaa = aa.toString();
et2.removeTextChangedListener(watcher2);
et2.setText(aaa);
et2.addTextChangedListener(watcher2);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
};
TextWatcher watcher2 = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
Editable b=et2.getText();
Double bb=Double.parseDouble(b.toString());
String bbb=bb.toString();
et1.removeTextChangedListener(watcher1);
et1.setText(bbb);
et1.addTextChangedListener(watcher1);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
};
et1.addTextChangedListener(watcher1);
et2.addTextChangedListener(watcher2);
推荐阅读
- python - 在python中用正则表达式替换k代表千
- sql - Postgresql 查询结果中的重复行
- c++ - 通过 MacPorts 在 MacOS 上安装 C++ NetCDF4 库失败
- wordpress - dbDelta wordpress 不能使用 DECIMAL 数据类型
- sampling - 交流电压测量采样
- pandas - 将数组的值复制到数据框的行
- java - Android Studio 循环遍历绑定中的元素
- docker - 使用多个命令在 Cloud Build 上构建 Terraform
- r - 如何将字符日期转换为 R 中的日期格式?
- android - Android Sceneform 使用垂直平面检测墙壁