您的位置:首页 > 其它

两个editText相互监听的死循环问题

2016-02-02 10:54 387 查看

图片1

由于要使两种支付方式的和等于总价,所以对两个editText设置监听,来改变另一个的值,但由于另一个值得改变,会触发另一个值自身的textchangeListener,因此又给第一个设值,导致一直死循环,因此我们要解决死循环的问题;
思路:当其中任意一个获得焦点时,将获得焦点的editText添加textchangeListener监听,未获得的删除监听,完美结局死循环;
首先:重写一个editText用于清除它所有的[b]textchangeListener;[/b]
[b]然后:为它添加[/b]
FocusChangeListener,当获得焦点时添加textchangeListener,否则移除;

实现:编写自定义editTextView,重写添加editText相应方法:

@Override

public void addTextChangedListener(TextWatcher watcher)

{

if (mListeners == null)

{

mListeners = new ArrayList<TextWatcher>();

}

mListeners.add(watcher);

super.addTextChangedListener(watcher);

}

@Override

public void removeTextChangedListener(TextWatcher watcher)

{

if (mListeners != null)

{

int i = mListeners.indexOf(watcher);

if (i >= 0)

{

mListeners.remove(i);

}

}

super.removeTextChangedListener(watcher);

}

public void clearTextChangedListeners()

{

if(mListeners != null)

{

for(TextWatcher watcher : mListeners)

{

super.removeTextChangedListener(watcher);

}

mListeners.clear();

mListeners = null;

}

}

为引用的editText添加监听:

mEt_paymoney2.setOnFocusChangeListener(new View.OnFocusChangeListener() {

@Override

public void onFocusChange(View v, boolean hasFocus) {

if (hasFocus) {

mEt_paymoney2.addTextChangedListener(new TextWatcher() {....}

//获得焦点才添加监听

}else{

mEt_paymoney2.clearTextChangedListeners();

//失去焦点时清除监听

}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: