【问题标题】:RX java/Android how to i achieve This toast on every click using debounce operatorRX java/Android 我如何使用 debounce 操作符在每次点击时实现这个 toast
【发布时间】:2017-08-26 12:57:33
【问题描述】:

我有这个 ImageView,点击它应该显示 toast 并在点击图像视图时制作 api,所以我决定在 Rx 中使用 Debounce 运算符 但现在 thost 在每次点击时都不可见。下面是代码

cartSubscriptionDecrement = RxView.clicks(holder.databinding
            .cartQuantityLayout.ivDecreaseQuantity)
            .debounce(1000, TimeUnit.MILLISECONDS)
            .subscribe { next ->
   cartQuantityEvent.onCartQuantityDecremented(cartSubscriptionDecrement!!)
            }

我需要在每次单击 imageView 时显示 toast。

我尝试为图像视图设置单独的 onclick 方法,但在调试过程中我发现控件永远不会进入 onclick 方法,这是我的另一个 onclick 方法

如何在每次点击时实现此祝酒,而不是在每次点击时调用 api(使用 Debounce 运算符)。

【问题讨论】:

  • holder.deleteCartIcon!!.setOnClickListener { v -> Log.e("clicked","clicked") } 上面是另一个onclick方法

标签: java android kotlin rx-java rx-android


【解决方案1】:

有多种方法可以满足您的要求。我在下面列出了最简单的方法,但需要更多地考虑使用 doOnNext 的潜在副作用。

The code for this example lives on Github here if you're interested in running the app. 刚刚发现包名错误,但示例运行正常。

与示例最相关的代码如下。关键是你需要在显示 Toast 之后之后去抖动,而不是之前。

RxView.clicks(image1)
            .doOnNext(imageClickedEvent -> {
                // Show toast every time onNext is called (this will also log to LogCat)
                showToast();
            })
            .debounce(1000, TimeUnit.MILLISECONDS)
            .subscribe(clickEvent -> {
                makeApiCall();
            });

我尝试为图像视图设置单独的 onclick 方法,但在调试过程中我发现控件永远不会进入 onclick 方法,这是我的另一个 onclick 方法

我相信是这种情况,因为 RxClicks 在 ImageView 上设置了一个侦听器,而这发生在 框架设置了 onClick 侦听器之后,并且您只能在 View 上拥有一个 OnClickListener 如果我没记错。所以发生的事情是RxView.clicks(imageView) 正在接收点击事件,而不是您单独创建的方法。

【讨论】:

    【解决方案2】:

    您必须将“.subscribeOn(AndroidSchedulers.mainThread())”应用于所有 RxBinding 事件,例如“RxView.clicks()”

    【讨论】:

      猜你喜欢
      • 2021-12-17
      • 1970-01-01
      • 2021-12-29
      • 2014-01-08
      • 1970-01-01
      • 1970-01-01
      • 2014-08-03
      • 2013-12-28
      • 1970-01-01
      相关资源
      最近更新 更多