- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在当前的 Android 应用程序中使用 RxBinding,并希望实现文本搜索功能。
我的代码如下:-
compositeDisposable.add(RxTextView.textChangeEvents(searchEditText)
.skipInitialValue()
.subscribeOn(Schedulers.io())
.debounce(200, TimeUnit.MILLISECONDS)
.filter(textViewTextChangeEvent -> (textViewTextChangeEvent.text().length() == 0 || textViewTextChangeEvent.text().length() > 2))
.map(event -> event.text().toString())
.distinct()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(charactersResponse -> {
articlesLiveData = viewModel.textSearch(charactersResponse);
textLiveData.removeObserver(TextFragment.this);
textLiveData.observe(TextFragment.this, TextFragment.this);
}));
我只想搜索不同的值,但是上面的代码会发出重复的搜索请求。
为什么 distinct 不能删除重复的字符串?
例如,当我在我的搜索 EditText 中输入“chilean”时
我的搜索代码使用以下字符串调用
chi
chi
chil
chil
chil
chile
chile
chilea
chilean
chilean
我做错了什么?
最佳答案
在没有更多上下文的情况下,我无法确定,但似乎已经进行了两次订阅。你说你把这段代码放在 Fragment::onViewCreated
中,所以也许你正在加载另一个 fragment 然后返回到这个 fragment 而不处理第一个订阅?您可以在进行订阅的地方放置一个断点,以查看它是否被调用两次。如果它只被调用一次而你仍然有这个问题,我将需要查看更多你的代码来诊断它。
当我将您的代码复制到 Activity::onCreate 时,它会按预期工作。因此,您可以做的第一件事是确保您在 Fragment::onDestroyView 中处理您的 compositeDisposable。这应该可以解决多次发射问题。
现在您将遇到另一个问题:您正在使用 distinct()
,但我怀疑这就是您想要的搜索栏。 Distinct 将在可观察对象的生命周期内过滤所有非唯一值。所以一旦它发出“chile”,如果你继续输入“chilean”然后擦掉“an”,你将再也看不到“chile”。您可能需要的是 distinctUntilChanged()
,它只是过滤掉与最后发出的值的非唯一匹配项。
关于android - 如何使用 RxBinding RxTextView.textChangeEvents 处理不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53046883/
我是新的 android 和 rxjava。我经历过很多使用 rxbindings 监听事件的例子。比如这个 RxView.clicks(b).subscribe(new Action1() {
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
试图找出为什么 RxTextView.textChanges 只发出初始值。我的理解是它应该向下游订阅发送所有新的文本更改。 这是代码 public class SignupFragment
我正在使用 RxBinding 并在 RecyclerView 适配器中的 onBindViewHolder 方法中创建一个订阅,它会重用项目。有什么简单的方法可以检查我是否已将订阅者分配给 Edit
背景 public Observable> search(SearchView searchView) { return RxSearchView.queryTextChanges(searc
这是我如何在 Kotlin 中使用 RxBinding: override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
这是我的代码: // Observable from RxView RxView.clicks(mBtnLogin) .throttleFirst(500, TimeUnit.
我正在使用 RxBindings 库中的 Focus Observable 来对焦点变化使用react。因为我想验证输入并触发动画,所以我需要两次焦点事件。 Jake Wharton 建议使用 sha
我在当前的 Android 应用程序中使用 RxBinding,并希望实现文本搜索功能。 我的代码如下:- compositeDisposable.add(RxTextView.textChangeE
我在我的项目中使用 butterknife 实现了 rxjava,如下所示: @BindView(R.id.login_et) EditText mLoginField; @BindView(R.id
我正在对 EditText 进行验证.我想要 CharSequence如果为空或不以 开头,则无效"https://" .我也在使用 接收绑定(bind) ,特别是 RxTextView .问题是当剩
我正在尝试通过一些延迟来监控文本更改,以避免来自听众的垃圾邮件。但我当然不想收到一些已经处理过的元素。 这个观察者 RxTextView.textChanges(editText)
我在 Fragment 中有一个 RecyclerView,项目点击是使用 RxJava2 处理的,如 this SO answer 中所述。 , 它在非 fragment 中工作正常。 privat
当用户在 SearchView 小部件中输入内容时,应用程序应该制作一个API 调用(在后台线程中)从服务器获取搜索结果,并在 RecyclerView 中显示它们(在 UI 线程中)。 我在 fra
我是 Rx 世界的新手,尝试使用 RxJava、RxBinding 和 实现我的 AutoCompleteTextView >改造 2。 这是我想出的麻烦:(也许我没有以正确的方式做。) 我有一个 A
我想在我的项目中为 Android UI 小部件使用 RxJava 绑定(bind) API。 因此遵循本网站的指导' https://github.com/JakeWharton/RxBinding
我是一名优秀的程序员,十分优秀!