两个editText相互监听的死循环问题
2016-02-02 10:54
387 查看
图片1
由于要使两种支付方式的和等于总价,所以对两个editText设置监听,来改变另一个的值,但由于另一个值得改变,会触发另一个值自身的textchangeListener,因此又给第一个设值,导致一直死循环,因此我们要解决死循环的问题;思路:当其中任意一个获得焦点时,将获得焦点的editText添加textchangeListener监听,未获得的删除监听,完美结局死循环;
首先:重写一个editText用于清除它所有的[b]textchangeListener;[/b]
[b]然后:为它添加[/b]
FocusChangeListener,当获得焦点时添加textchangeListener,否则移除;
实现:编写自定义editTextView,重写添加editText相应方法:
@Overridepublic 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();
//失去焦点时清除监听
}}
相关文章推荐
- github新建库并且提交、push更新被拒绝、公钥设置方法
- 贝贝网:特卖场景下的大数据平台和机器学习实践
- ios开发_微信支付
- UIViewContentMode各类型效果
- go语言基础概要
- Audio streaming and caching in iOS using AVAssetResourceLoader and AVPlayer
- Clustered Data ONTAP Fundamentals课程第三单元学习笔记
- [从头学数学] 第68节 小数的意义和性质
- JSON API强大的WordPress做API接口插件
- go 调用mysql
- Android系统下的动态Dex加载
- 动态规划 算法(DP)
- WC2016游记
- js中argument
- 求职,你需要一个漂亮的GitHub账号!
- hdu 1556 Color the ball (扫描线+树状数组)
- phalcon-入门篇2(HelloWord与PhalconTools)
- phalcon-入门篇3(优美的URL路由与Config)
- 《从程序猿到项目经理》读后感-夹心饼干
- 深入了解STL中set与hash_set,hash表基础