文档章节

Android 避免2个相互关联的 EditText 死循环

布拉德利_蔡
 布拉德利_蔡
发布于 2017/02/06 20:10
字数 453
阅读 27
收藏 0

##起因 最近在做一个汇率转换的App练手,界面上会有两个相关联的的EditText,改变其中一个的值,另一个也会随之改变。

界面

对于这个问题最简单的思路就是为每个EditText附上addTextChangedListener,并实现TextWatcher,在afterTextChanged中去修改另一个EditText的值,但这种实现方式会造成死循环。仔细想想,更改EditText A的时候会触发TextChangedListener,然后修改了EditText B的值,这个时候EditText B的TextChangedListener被触发,又去修改EditText A的值,如此循环,不穷尽也。

##解决办法

网上已经有一些解决办法了,大致的思路就是当焦点在一个EditText上时,注销另一个EditText的监听,这个思路是正确的,但不太适合我这个App,上述的思路有一个前提就是,每次只会有一个EditText的值被修改。但我这个App存在一种情况,就是去选择货币类型重新返回到这个页面的时候会整体刷新一下界面,同时调用这两个EditText的setText,这样又会陷入死循环。 后来我发现只要调用了setText就会触发TextChangedListener,哪怕前后的值是一模一样的。

我就去看了一下源码,最终会调用到这个setText:

setText

往下翻,在函数的末尾有这么一段: setText

发现这有个needEditableForNotification,再往前翻:

setText

这个needEditableForNotification的值就是判断当前有没有注册监听,如果有就在setText函数的最后通知各个监听。

那么解决方法就很简单了,就只要在调用setText之前把监听注销掉,setText之后再注册回来就行了,注销监听就用removeTextChangedListener。

© 著作权归作者所有

共有 人打赏支持
布拉德利_蔡

布拉德利_蔡

粉丝 0
博文 5
码字总数 2293
作品 0
南京
程序员
Activity 与 Fragment 之间相互通信

欢迎转载,但请保留文章原始出处→→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4000390.html 联系方式:smyhvae@163.com 【正文】 一、接口回...

iSnowFlake
2015/11/19
0
1
android Configuration系统设置

Configuration类是专门用来描述手机设备上的配置信息。这些配置信息包括用户特定的配置项,也包括系统的动态设备配置。 程序中可调用Activity的如下方法来获取Configuration对象 //获取系统的...

张林思密达
2015/08/19
0
0
Android:Layout_weight的深刻理解,个人首发,欢迎转载和顶贴!

分类: Android2012-06-06 00:58 439人阅读 评论(10) 收藏 举报 最近写Demo,突然发现了Layout_weight这个属性,发现网上有很多关于这个属性的有意思的讨论,可是找了好多资料都没有找到一个...

thisiscx
2012/12/27
0
3
Android app应用性能优化

一、名词解释 内存溢出 实质应用程序不能及时释放内存或者加载到内存上的数据太大而导致的OOM问题 内存泄漏 目标类被其他类持有、导致无法销毁、从而导致目标类无法被调用也无法销毁。 窗体(...

IamOkay
2014/11/03
0
0
Android开发之EditText属性详解

1、EditText输入的文字为密码形式的设置 (1)通过.xml里设置: 把该EditText设为:android:password="true" // 以”.”形式显示文本 (2)在代码里设置: 通过设置EditText的setTransformation...

的书法上的
2014/07/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

[雪峰磁针石博客]软件测试专家工具包1web测试

web测试 本章主要涉及功能测试、自动化测试(参考: 软件自动化测试初学者忠告) 、接口测试(参考:10分钟学会API测试)、跨浏览器测试、可访问性测试和可用性测试的测试工具列表。 安全测试工具...

python测试开发人工智能安全
今天
2
0
JS:异步 - 面试惨案

为什么会写这篇文章,很明显不符合我的性格的东西,原因是前段时间参与了一个面试,对于很多程序员来说,面试时候多么的鸦雀无声,事后心里就有多么的千军万马。去掉最开始毕业干了一年的Jav...

xmqywx
今天
2
0
Win10 64位系统,PHP 扩展 curl插件

执行:1. 拷贝php安装目录下,libeay32.dll、ssleay32.dll 、 libssh2.dll 到 C:\windows\system32 目录。2. 拷贝php/ext目录下, php_curl.dll 到 C:\windows\system32 目录; 3. p...

放飞E梦想O
今天
0
0
谈谈神秘的ES6——(五)解构赋值【对象篇】

上一节课我们了解了有关数组的解构赋值相关内容,这节课,我们接着,来讲讲对象的解构赋值。 解构不仅可以用于数组,还可以用于对象。 let { foo, bar } = { foo: "aaa", bar: "bbb" };fo...

JandenMa
今天
1
0
OSChina 周一乱弹 —— 有人要给本汪介绍妹子啦

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享水木年华的单曲《中学时代》@小小编辑 手机党少年们想听歌,请使劲儿戳(这里) @须臾时光:夏天还在做最后的挣扎,但是晚上...

小小编辑
今天
48
8

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部