Android,两个互相影响的EditText如何避免死循环
2012-08-20 11:00
316 查看
简单来说,是一个类似如下的需求:
两个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);
}
两个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);
}
相关文章推荐
- Android,两个互相影响的EditText如何避免死循环
- Android,两个互相影响的EditText如何避免死循环
- Android两个EditText互相监听
- android中EditText如何设置取消自动聚焦的一种简单方法
- 50个Android开发技巧(09 避免用EditText对日期进行验证)
- android 中如何限制 EditText 最大输入字符数
- 如何设置圆角的EditText——Android移动开发
- ANDROID中EDITTEXT如何定位光标位置
- android EditText中如何将输入框中的文字选中?
- 如何在点击android中的EditText的时候不弹出软键盘
- android如何做iphone那种图片抖动动画的效果(包括button和EditText)
- android开发之如何消除EditText控件的边缘
- android的EditText,焦点会默认在第一个EditText中,我不希望焦点默认在任何EditText中,如何做?
- 【整理】Android中EditText中的InputType类型含义与如何定义
- Android EditText输入最大长度限制如何给用户以友好的提示
- Android开发技巧二--避免在EditText中验证日期
- 50个Android开发技巧(09 避免用EditText对日期进行验证)
- Android中EditText如何去除边框添加下划线
- 在含有EditText的界面中,如何避免软键盘的弹出
- android 中如何限制 EditText 最大输入字符数