使用 RXBindings 在 RXjava 中延迟 + distinctUntilChanged
delay + distinctUntilChanged in RXjava with RXBindings
我正在尝试通过一些延迟来监控文本更改,以避免来自听众的垃圾邮件。但是我当然不想收到一些已经处理过的物品。
这位观察者
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
所以我收到 emmited 项目 4 次,但字符串是相等的,并且有 distinctUntilChanged
。为什么 distinctUntilChanged
在这种情况下不起作用?是否可以使用 rx 运算符延迟实现此逻辑?
如果我没记错的话,textChanges 或文本控件会重复使用相同的 CharSequence,所以您会遇到这种异常情况。您必须在延迟之前使用 map(v -> new String(v)) 来创建不可变副本。
Is it possible to return only last result when user stop typing? In this case abcd for one time? last() not for this issue as I understand.
查找 debounce
运算符的示例。
我正在尝试通过一些延迟来监控文本更改,以避免来自听众的垃圾邮件。但是我当然不想收到一些已经处理过的物品。
这位观察者
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
所以我收到 emmited 项目 4 次,但字符串是相等的,并且有 distinctUntilChanged
。为什么 distinctUntilChanged
在这种情况下不起作用?是否可以使用 rx 运算符延迟实现此逻辑?
如果我没记错的话,textChanges 或文本控件会重复使用相同的 CharSequence,所以您会遇到这种异常情况。您必须在延迟之前使用 map(v -> new String(v)) 来创建不可变副本。
Is it possible to return only last result when user stop typing? In this case abcd for one time? last() not for this issue as I understand.
查找 debounce
运算符的示例。