两个EditText,其中一个值发生改变,另一个随之改变,这种效果一点没做好,两个EditText就会在TextWatcher方法中陷入死循环,下面是我自己写的一些代码:

text1 = (EditText) this.findViewById(R.id.edit1);

text2 = (EditText) this.findViewById(R.id.edit2);
textEN = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
text2.removeTextChangedListener(textTS);

//设置输入的数字为两位小数
if (s.toString().contains(".")) {
if (s.length() - 1 - s.toString().indexOf(".") > 2) {
s = s.toString().subSequence(0,
s.toString().indexOf(".") + 3);
text1.setText(s);
text1.setSelection(s.length());
}
}
if (s.toString().trim().substring(0).equals(".")) {
s = "0" + s;
text1.setText(s);
text1.setSelection(2);
}
if (s.toString().startsWith("0")
&& s.toString().trim().length() > 1) {
if (!s.toString().substring(1, 2).equals(".")) {
text1.setText(s.subSequence(0, 1));
text1.setSelection(1);
return;
}
}
//设置EditText的内容
if(!text1.getText().toString().trim().equals("") &&
null != text1.getText().toString().trim()){
s1 = text1.getText().toString().trim();
n1 = Float.parseFloat(s1);
}
text2.setText(getNumber2()+"");
}
@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
text2.addTextChangedListener(textTS);
}
};

textTS = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
text1.removeTextChangedListener(textEN);
if (s.toString().contains(".")) {
if (s.length() - 1 - s.toString().indexOf(".") > 2) {
s = s.toString().subSequence(0,
s.toString().indexOf(".") + 3);
text2.setText(s);
text2.setSelection(s.length());
}
}
if (s.toString().trim().substring(0).equals(".")) {
s = "0" + s;
text2.setText(s);
text2.setSelection(2);
}
if (s.toString().startsWith("0")
&& s.toString().trim().length() > 1) {
if (!s.toString().substring(1, 2).equals(".")) {
text2.setText(s.subSequence(0, 1));
text1.setSelection(1);
return;
}
}
if(!text2.getText().toString().trim().equals("") &&
null != text2.getText().toString().trim()){
s2 = text2.getText().toString().trim();
n2 = Float.parseFloat(s2);
}
text1.setText(getNumber1()+"");
}
@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
text1.addTextChangedListener(textEN);
}
};
text1.addTextChangedListener(textEN);
text2.addTextChangedListener(textTS);

private float getNumber1(){
return n-n2;
}
private float getNumber2(){
return n-n1;
}

做了好久才调通,希望能对同样遇到这类困难的人!


更多相关文章

  1. 3.0之后在LinearLayout里增加分割线
  2. Android按钮按下时和弹起时的颜色设置
  3. tab2
  4. 自定义ImageView重写onTouchEvent
  5. Web初试
  6. Android(安卓)Viewpager中的Fragment 保存状态
  7. Android(安卓)小功能之 TextView 只设置某些文字可点击
  8. Android(安卓)TextView控件
  9. android基础6——设置圆角按钮

随机推荐

  1. Android Framework architecture -- blue
  2. Android adb功能使用方法
  3. Android开发学习1 - Android架构
  4. 值得推荐的Android App (一)
  5. Android 计算器解析(一): 建立简单界面
  6. Android 关于定位中的那点事(GPS,GPGGA,NM
  7. android 扫描文件栈溢出问题,自己写的扫描
  8. Android 基于回调的事件处理----事件分发
  9. Android(安卓)8.1 添加属性SystemPropert
  10. Android(安卓)AsyncTask for Long Runnin