gpt4 book ai didi

android - addTextChangedListener 抛出 StackOverflow 错误

转载 作者:行者123 更新时间:2023-11-29 14:36:14 24 4
gpt4 key购买 nike

我有这个代码:

areasqm.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable arg0) {
}

@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
}

@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
double val = Double.parseDouble(areasqm.getText().toString());
areaha.setText(String.valueOf(val/10000));
}
});

areaha.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable arg0) {
}

@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
}

@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
double val = Double.parseDouble(areaha.getText().toString());
areasqm.setText(String.valueOf(val*10000));
}
});

每当我在其中一个 EditText 中键入一个值时,我的应用程序就会崩溃并抛出 java.lang.StackOverflowError

为什么?如何解决这个问题?

最佳答案

原因是:当您调用 areaha.setText(String.valueOf(val/10000)); 时,areahaTextChangedListener 是触发并调用 areasqm.setText(String.valueOf(val*10000));,因此 areasqmTextChangedListener 也被触发并调用 areaha.setText(String.valueOf(val/10000));。所以你有永恒的循环,结果是这个 java.lang.StackOverflowError.

你可以尝试这样的事情。

private TextWatcher areasmlWatcher = new TextWatcher() {
@Override
public void afterTextChanged(Editable arg0) {
}

@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
}

@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
double val = Double.parseDouble(areasqm.getText().toString());
areaha.removeTextChangedListener(areahaWatcher);
areaha.setText(String.valueOf(val / 10000));
areaha.addTextChangedListener(areahaWatcher);
}
};

private TextWatcher areahaWatcher = new TextWatcher() {
@Override
public void afterTextChanged(Editable arg0) {
}

@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
}

@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
double val = Double.parseDouble(areaha.getText().toString());
areasqm.removeTextChangedListener(areasmlWatcher);
areasqm.setText(String.valueOf(val*10000));
areasqm.addTextChangedListener(areasmlWatcher);
}
};

private void someMethod() {
areasqm.addTextChangedListener(areasmlWatcher);
areaha.addTextChangedListener(areahaWatcher);
}

关于android - addTextChangedListener 抛出 StackOverflow 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37562301/

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