当前位置:  开发笔记 > 编程语言 > 正文

使用RXBindings在RXjava中延迟+ distinctUntilChanged

如何解决《使用RXBindings在RXjava中延迟+distinctUntilChanged》经验,为你挑选了1个好方法。

我试图以一些延迟来监控文本更改,以避免来自侦听器的垃圾邮件.但是我当然不希望收到一些已经处理过的物品.

这个观察者

RxTextView.textChanges(editText)
                .delay(2, TimeUnit.SECONDS)
                .distinctUntilChanged()
                .filter(charSequence -> charSequence.length() != 0)
                .subscribe(charSequence1 -> Log.e("!@#", charSequence1));

当我输入"abcd"时,会弹出这样的项目:

E/!@#: abcd
E/!@#: abcd
E/!@#: abcd
E/!@#: abcd

所以我收到了4次emmited项目,但字符串是平等的,并且有distinctUntilChanged.为什么distinctUntilChanged不在这种情况下工作?是否有可能通过rx运算符延迟实现此逻辑?



1> akarnokd..:

如果我没记错的话,textChanges或文本控件重用相同的CharSequence,这样你就会得到这种异常.您必须在延迟之前使用map(v - > new String(v))来创建不可变副本.

当用户停止输入时,是否可以仅返回最后结果?在这种情况下abcd一次?最后()不是我理解的这个问题.

查找debounce运算符的示例.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有