【问题标题】:Change EditText text from onTextChangeListener()从 onTextChangeListener() 更改 EditText 文本
【发布时间】:2012-08-30 06:52:38
【问题描述】:

我正在开发一个 Android 应用程序。在我的应用程序中,我必须使用基于文本的图像。所以我写 OnChangeListener()EditText。以下是我的示例代码。

edt.addTextChangedListener(this);  
@Override
public void afterTextChanged(Editable s) {
    // TODO Auto-generated method stub
    CharSequence cs=convert(edt.getText.toString());
            edt.setText(cs);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
        int after) {
    // TODO Auto-generated method stub


}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
    // TODO Auto-generated method stub


}

但是我得到了上述代码的异常。我知道异常的原因是从 afterTextChanged() 方法调用 setText()。但是我必须根据相同的EditText文本更改来更改EditText文本值。帮助我的朋友

【问题讨论】:

  • 你能解释一下你得到了什么例外吗?
  • 我得到了stackoverflow。原因是我正在尝试从 ontextchanged() 设置文本。所以它会进行无休止的递归。
  • 一旦你已经完成了,你又在edittext中设置文本,这也是不改变它吗?这不是很奇怪吗?你确定,你真的需要在那里重写文本,或者只是想相应地改变图像?

标签: android android-edittext


【解决方案1】:

另一种解决方案是使用布尔变量,这样它就不会进入无限调用堆栈并最终给出stackoverflow exception

public void afterTextChanged(Editable s) {
    if(!flag) 
    {
            flag = true;

            edt.setText("string");

            flag = false;
    }
}

【讨论】:

    【解决方案2】:

    只需在设置文本之前移除您的侦听器,并在完成后重新注册,如下所述:

    Clear EditText text after adding onTextChanged implemenation

    【讨论】:

      猜你喜欢
      • 2018-10-11
      • 1970-01-01
      • 2012-05-28
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多