当我使用EditText.setText()时,如何禁用textwWatcher



我正在一个android工作室项目中工作,我正在尝试制作一个数字系统转换器应用程序。我使用了2个EditText(二进制和十进制(APP屏幕截图

在这里,我希望每当用户输入十进制EditText时,其相应值都应设置为二进制EditTextextWatcher来计算用户何时更改输入字段中的值。但我有一个问题,当应用程序崩溃时,只要有东西输入到任何EditText。

用于十进制编辑的TextWatcher文本:-

TextWatcher textDec=new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {

}
@Override
public void afterTextChanged(Editable s) {
String binValue;
String decString;
decString = dec.getText().toString();
if (decString.trim().equals("")) {
binValue = "";
}
else {
binValue = decToBinMain(decString);
}
if (bin.getText().toString()!=binValue) {
textView4.setText(binValue);
bin.setText(binValue);
}
}
};
dec.addTextChangedListener(textDec);

用于二进制编辑的文本观察程序文本:-

TextWatcher textBin=new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override

public void onTextChanged(CharSequence s, int start, int before, int count) {
String binValue;
String decString;
binValue=bin.getText().toString();
if(binValue.trim().equals("")){
decString="";
}
else {
decString = String.valueOf(binToDec(binValue));
}
if(!dec.getText().toString().equals(decString)) {
textView.setText(decString);
dec.setText(decString);
}
}
@Override
public void afterTextChanged(Editable s) {
}
};

bin.addTextChangedListener(textBin);

我不知道问题出在哪里,也不知道为什么应用程序在输入任何字段时都会崩溃。但是,当我将相应的值设置为textView时,它确实可以很好地工作。需要任何帮助!!谢谢!!

您有一个循环调用:

dec->bin->dec->bin->dec->仓

  1. 我建议您在方法中提取一些代码,以使代码更可读。

  2. 做完之后,你可能会有一个比我更好的主意。我的是一面旗帜:

    // in the Activity
    

    布尔更新=true

    //将其放入每个TextWatcher

    if(update) {
    // execute your code here
    };
    update = !update;
    

你可以在SO上看到我的答案。只是为了给你解决方案的要点。设置一些标志(这种机制可能会有所不同。你也可以看到人们想出了不同的方法来解决这个问题(。在您的核心逻辑中,查看是否设置了该标志,如果是,则不要运行该核心逻辑。

请在SO 上查看我的其他方法

相关内容

  • 没有找到相关文章

最新更新