gpt4 book ai didi

java - 如何使用 TextWatcher 更新相同的 EditText?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:01:01 25 4
gpt4 key购买 nike

在我的 Android 应用程序中,我需要实现一个 TextWatcher 接口(interface)来实现 onTextChanged。我遇到的问题是,我想用一些额外的字符串更新同一个 EditText。当我尝试这样做时,程序终止。

 final EditText ET = (EditText) findViewById(R.id.editText1);
ET.addTextChangedListener(new TextWatcher() {

@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
try
{
ET.setText("***"+ s.toString());
ET.setSelection(s.length());
}
catch(Exception e)
{
Log.v("State", e.getMessage());
}
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{

}

@Override
public void afterTextChanged(Editable s)
{
}
});

我的程序终止了,即使我尝试像在我的代码中那样捕获异常,它仍然终止了。有谁知道为什么会发生这种情况以及我如何实现这一目标?谢谢。

最佳答案

TextView 的内容在 onTextChanged 事件中不可编辑

相反,您需要处理 afterTextChanged 事件才能对文本进行更改。

有关更详尽的解释,请参阅:Android TextWatcher.afterTextChanged vs TextWatcher.onTextChanged


注意:错误onTextChanged

很明显,在 afterTextChanged 事件中不断更改 text 会导致无限循环。

来自 the ref :

public abstract void afterTextChanged (Editable s)
This method is called to notify you that, somewhere within s, the text has been changed. It is legitimate to make further changes to s from this callback, but be careful not to get yourself into an infinite loop, because any changes you make will cause this method to be called again recursively. ...

  • 建议 1:如果可以,请检查s 是否已经在事件触发时您想要的。

    @Override
    public void afterTextChanged(Editable s)
    {
    if( !s.equalsIngoreCase("smth defined previously"))
    s = "smth defined previously";
    }
  • 建议 2:如果您需要做更复杂的事情(格式化,验证)你也许可以使用像 thispost. 中那样的 synchronized 方法

注意 2:将输入格式化为部分隐藏的 n 星直到最后 4 个字符(****四)

您可以在建议 1 中使用类似这样的内容:

    @Override
public void afterTextChanged(Editable s)
{
String sText = ET.getText().toString()

if( !isFormatted(sText))
s = format(sText);
}
bool isFormatted(String s)
{
//check if s is already formatted
}

string format(String s)
{
//format s & return
}

关于java - 如何使用 TextWatcher 更新相同的 EditText?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9498155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com