一行代码解决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

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值