[英]Using Two onTextChanged Listerners(Android)
我正在尝试创建一个简单的货币转换器,并在Google的货币转换器之后对其进行建模,其中用户将在一个字段中输入金额,而应用程序将转换并在相应的字段中显示金额。
为此,我决定使用onTextChanged
侦听器,因为我希望它在用户输入金额时进行更新。
以下是一些代码片段,可以使画面更清晰。
private EditText Dollar,Euro;
private double Result;
private String Amount,Amount2;
Dollar=(EditText)findViewById(R.id.tbDollar);
Euro=(EditText)findViewById(R.id.tbEuro);
Dollar.addTextChangedListener(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) {
try
{
Euro.setText(" ");
Amount=Dollar.getText().toString();
Result=0.92*Double.parseDouble(Amount);
Amount2 = String.format("%.2f", Result);
Euro.setText(Amount2);
}
catch (Exception e)
{
Euro.setText("0.00");
Log.e("Error","Unable to convert a blank Number");
}
}
直到我为欧元字段添加了相同的代码之前,此代码一直运行良好,在添加完该应用程序后,只要输入任何数字,应用程序就会崩溃。
我确实怀疑,例如,将一个数字插入美元字段时,它会计算欧元,然后将其插入欧元字段,然后触发欧元的onTextchanged
侦听器,计算出美元,然后尝试将其插入那里,从而创建一个几乎无限循环,然后使应用程序崩溃。
我确实认为解决方案是指定onTextChanged
Listener仅从用户输入触发,但我无法在此主题上找到任何东西。
出于兴趣考虑,包括了Euro onTextChanged
侦听器,并且如果有任何不同,则在OnCreate方法中声明所有这些代码。
谢谢
public void onTextChanged(CharSequence s, int start, int before, int count)
{
try
{
Amount=Euro.getText().toString();
Result=1.09*Double.parseDouble(Amount);
Amount2 = String.format("%.2f", Result);
Dollar.setText(Amount2);
}
catch (Exception e)
{
Dollar.setText("0.00");
Log.e("Error","Unable to convert a blank Number");
}
}
在其各自的onTextChanged侦听器中检查编辑文本的焦点。 如果编辑文本未聚焦,则在try catch块之前返回。
我认为当第一个文本更改时,您应该删除另一个侦听器。 更改文本并重新添加侦听器。
您可以使用:removeTextChangedListener(TextWatcher watcher)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.