我是靠谱客的博主 故意马里奥,最近开发中收集的这篇文章主要介绍一行代码解决addTextChangedListener多次重复执行的问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

今天发现一个怪问题,在Edittext中编辑文本的时候logcat一直刷屏,打印相同的日志,虽然界面上没有卡顿情况,但是我这块输入的东西要存放到本地数据库,导致数据不停的读写,非常影响性能。然后就坐下来思考,在afterTextChanged方法中做调用次数统计,确实可以触发多次;然后网上搜了一边方法千奇百怪,还不起效果;所以只能自己搞,具体解决方案如下:


//1、移除原来的文字改变监听,避免列表刷新或者view复用所造成TextWatcher被多次调用
if (mTextWatcher !=null){
mEt.removeTextChangedListener(mTextWatcher);
}
//2 创建TextWatcher
mTextWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
//todo
}
};
//3 先移除,后添加
mEt.addTextChangedListener(mTextWatcher);
//4 设置值
mEt.setText(value);

重点就是先removeTextChangedListener移除原有的监听,我这里Edittext是在ListView里面,这两个嵌套问题比较多,还有输入一个item,其他一起改变,或者滑动重复等,一般都是设置tag处理
如果在Fragment中可能被保存状态,第二次进入有可能出现addTextChangedListener自动执行,所以可以在onDestroyView生命周期中去执行removeTextChangedListener

最后

以上就是故意马里奥为你收集整理的一行代码解决addTextChangedListener多次重复执行的问题的全部内容,希望文章能够帮你解决一行代码解决addTextChangedListener多次重复执行的问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部