2017-05-03 65 views
0

的EditText递归问题,我有两个EditText上,当我在第一次的EditText值也将显示第二的EditText和副versa.When我进入第一的EditText值输入输入是表示第二EditText上,但是当我试图在第二个编辑的文本输入值未显示与应用不responding.I加入TextWatcher从另一个编辑文本删除,但无法解决issue.Thank你这么多的帮助后试图多的时间。如何解决安卓

etuptext.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

     } 

     @Override 
     public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
      et_bottom.setText(charSequence.toString()); 
     } 

     @Override 
     public void afterTextChanged(Editable editable) { 

     } 
    }); 

    et_bottom.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

     } 

     @Override 
     public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 


      // etuptext.setText(charSequence.toString()); 

     } 

     @Override 
     public void afterTextChanged(Editable editable) { 

     } 
    }); 
+0

后堆栈跟踪 – FAT

+0

我认为解决的办法是检查该文本实际上改变。 – jobbert

+0

尝试追加文本而直接设置它。这可能会解决你的目的。如果想在两个领域同时看到价值观。 – MobileEvangelist

回答

1

使用视图hasFocus()方法检查抵御其他EditText具有焦点。如果没有,则设置文本,否则什么也不做

这里是工作代码:

etuptext.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

    } 

    @Override 
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

     if (!et_bottom.hasFocus()) 
      et_bottom.setText(charSequence.toString()); 
    } 

    @Override 
    public void afterTextChanged(Editable editable) { 

    } 
}); 

et_bottom.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

    } 

    @Override 
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

     if (!etuptext.hasFocus()) 
      etuptext.setText(charSequence.toString()); 
    } 

    @Override 
    public void afterTextChanged(Editable editable) { 

    } 
}); 
+0

感谢您的代码完美工作。 –

+0

非常非常感谢@Ferdous艾哈迈德 –

+0

竭诚为您服务:)如果我的回答似乎是有用的,请举一个给予好评。在此先感谢 – FAT

0

嗨,您需要检查的是你反映的EditText不应该是关注的焦点。

etuptext.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

     } 

     @Override 
     public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
      if(!et_bottom.hasFocus()) 
      et_bottom.setText(charSequence.toString()); 
     } 

     @Override 
     public void afterTextChanged(Editable editable) { 

     } 
    }); 

    et_bottom.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

     } 

     @Override 
     public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

     if(!etuptext.hasFocus()) 
      etuptext.setText(charSequence.toString()); 

     } 

     @Override 
     public void afterTextChanged(Editable editable) { 

     } 
    }); 

一两件事都发生这种情况,因为当你尝试设置文本的EditText那么它得到了一个和第二个将请求焦点集中和写作等等应用正在步入不应对模式。

+0

是什么您的代码和我的代码有什么区别?我已经回答了这个问题。 – FAT

+0

帖子之间的差异只是我的帖子底部的解释。 – MobileEvangelist

0

设置文本之前取出TextWatchers。设置文本后,再次添加TextWatcher。

在伪代码:

TextWatcher edittext1watcher = null; 
TextWatcher edittext2watcher = null; 

edittext1watcher = new TextWatcher() { 
... 
    public void onTextChanged(.....) { 
     edittext2.removeTextChangedListener(edittext2watcher); 
     edittext2.setText(...); 
     edittext2.addTextChangedListener(edittext2watcher); 
    } 
}; 
edittext2watcher = new TextWatcher() { 
... 
    public void onTextChanged(.....) { 
     edittext1.removeTextChangedListener(edittext1watcher); 
     edittext1.setText(...); 
     edittext1.addTextChangedListener(edittext1watcher); 
    } 
}; 

edittext1.addOnTextChangedListener(edittext1watcher); 
edittext2.addOnTextChangedListener(edittext2watcher);