关于使用EditText的监听器容易引起死循环的问题
实习期间在使用EditText的addTextChangedListener(new TextWatcher())方法时(即给EditText增加监听器)后,遇到了死循环,前天又遇到了同样的问题,可见android新入门的同学容易在这个地方犯错误。
下面我为这种情况写了个demo,希望对新从事android开发的同事有用,关键代码如下:
myEdit.setKeyListener(new DigitsKeyListener());
myEdit.addTextChangedListener(textWatcher);
//为EditText添加监听器,监听其内容的变化以便进行其他相应的操作。
private TextWatcher textWatcher = new TextWatcher()
{
@Override
public void afterTextChanged(Editable s)
{
if (......)
{
......
refreshCost();//在监听器中调用函数。
}
else
{
......
}
......
}
};
private void refreshCost()
{
if(amt % appRate != 0)
{
DecimalFormat df = new DecimalFormat("###.0");
float rate = appRate;
float cost = amt / rate;
apCostText.setText(String.valueOf(df.format(cost)));
//不能在这里对myEdit进行赋值,因为myEdit已经加了侦听,赋值会不断触发refreshCost()函数,形成死循环。
}
else
{
int cost = amt / appRate;
apCostText.setText(String.valueOf(cost));
//不能在这里对myEdit进行赋值,否则同样会形成死循环
}
}