gpt4 book ai didi

android - StackOverflowError - 冗余调用 onTextChanged

转载 作者:行者123 更新时间:2023-11-30 01:09:55 25 4
gpt4 key购买 nike

(我正在学习英语...因此,请原谅我)

我正在制作一个转换 bin、dec 和 hex 的应用程序。我有三个 EditText(数字类型),我想在其中一个树内容发生变化时做一些事情。

我的三个EditText:

<EditText
android:id="@+id/input1"
android:inputType="number"
android:digits="01"
android:hint="BIN"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

<EditText
android:id="@+id/input2"
android:inputType="number"
android:digits="0123456789"
android:hint="DEC"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

<EditText
android:id="@+id/input3"
android:digits="0123456789ABCDEFabcdef"
android:hint="HEX"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

所以我使用了下面的代码来处理文本的变化:

EditText input1 = (EditText) findViewById(R.id.input1);
EditText input2 = (EditText) findViewById(R.id.input2);
EditText input3 = (EditText) findViewById(R.id.input3);

input1.addTextChangedListener(new TextWatcher() {

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

public void onTextChanged(CharSequence s, int start, int before, int count) {

String bin = input1.getText().toString();
String s1 = binToDec(bin) + "";
String s2 = binToHex(bin);
input2.setText(s1);
input3.setText(s2);
}

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

input2.addTextChangedListener(new TextWatcher() {

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

public void onTextChanged(CharSequence s, int start, int before, int count) {
try{
String dec = input2.getText().toString();
int num = Integer.parseInt(dec);

input1.setText(decToBin(num));
input3.setText(decToHex(num));
}
catch (NumberFormatException nfe){

}
}

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

input3.addTextChangedListener(new TextWatcher() {

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

public void onTextChanged(CharSequence s, int start, int before, int count) {

String hex = input3.getText().toString();
input1.setText(hexToBin(hex));
input2.setText(hexToDec(hex) + "");
}

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

但是...例如,每当用户输入 edittext 1 时,edittext 2 和 3 的内容都会发生变化。它会导致对 onTextChanged 的另一个调用,然后是无限调用堆栈 (StackOverflow)。那么...有没有更好的方法来做我想做的事?有人能帮助我吗?谢谢!!!

最佳答案

我建议不要使用 TextChangedListener,而是在用户完成输入文本后按下一个按钮。这消除了对 onTextChange 的无限调用。该按钮可以检查用户将数字输入到哪一个,并可以相应地更改其他 EditTexts

关于android - StackOverflowError - 冗余调用 onTextChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38515012/

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