简单来说,是一个类似如下的需求:
两个EditText,假设名字分别是 et1和et2;et1的值*一个数字,假设是4500=et2的值;
当 et1 的值发生变化时,et2 的值也发生变化,et2的值发生变化时,et1的值也发生变化,
用过用简单的 TextWatcher 就会发生死循环,如何避免,下面是这个例子代码的最核心部分,简单来说就是在一个事件起效果时,另外一个事件注销。
private int v1 = 4500;
private EditText et1, et2;
private TextWatcher tw1, tw2;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
et1 = (EditText) findViewById(R.id.editText1);
et2 = (EditText) findViewById(R.id.editText2);
et1.setText("3");
et2.setText("13500");
tw1 = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,int count) {
et2.removeTextChangedListener(tw2);
int et1val = 0;
try {
et1val =Integer.parseInt(s.toString());
} catch (Exception ex) {
et1val = 0;
}
Log.i("eee1", ""+et1val);
int et2val = et1val * v1;
et2.setText("" + et2val);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,int after) {
}
@Override
public void afterTextChanged(Editable s) {
et2.addTextChangedListener(tw2);
}
};
tw2 = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,int count) {
et1.removeTextChangedListener(tw1);
int et2val = 0;
try {
et2val = Integer.parseInt(s.toString());
} catch (Exception ex) {
et2val = 0;
}
Log.i("eee2", ""+et2val);
int et1val = et2val / v1;
et1.setText("" + et1val);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,int after) {
}
@Override
public void afterTextChanged(Editable s) {
et1.addTextChangedListener(tw1);
}
};
et1.addTextChangedListener(tw1);
et2.addTextChangedListener(tw2);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2010-08-20 网站的功能测试