牛骨文教育服务平台(让学习变的简单)
博文笔记

关于使用EditText的监听器容易引起死循环的问题

创建时间:2016-04-14 投稿人: 浏览次数:1276

 实习期间在使用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进行赋值,否则同样会形成死循环

}

 

}

 

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。