我有这个ImageView,点击它应该显示吐司,也点击图像查看api,所以我决定在Rx中使用Debounce运算符 但现在每次点击都看不到。下面是代码
cartSubscriptionDecrement = RxView.clicks(holder.databinding
.cartQuantityLayout.ivDecreaseQuantity)
.debounce(1000, TimeUnit.MILLISECONDS)
.subscribe { next ->
cartQuantityEvent.onCartQuantityDecremented(cartSubscriptionDecrement!!)
}
我需要在每次单击imageView时显示吐司。
我试图为Image View设置一个单独的onclick方法,但是在调试过程中我发现控件永远不会出现onclick方法这是我的另一个onclick方法
如何在每次点击时都实现此吐司,而不是在每次点击时都进行api调用(使用Debounce运算符)。
答案 0 :(得分: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();
});
我试图为Image View设置一个单独的onclick方法,但是在调试过程中我发现控件永远不会出现onclick方法这是我的另一个onclick方法
我相信是这种情况,因为RxClicks在ImageView上设置一个侦听器,并且在框架设置onClick侦听器之后发生,并且OnClickListener
上只有一个View
RxView.clicks(imageView)
1}}如果我没记错的话。所以正在发生的是if(deck.Count>=10)
{
cardP1 = deck.Take(10).Select(x => x.Value.ToString()).ToArray();
}
正在接收点击事件而不是您单独创建的方法。
答案 1 :(得分:0)
你必须申请" .subscribeOn(AndroidSchedulers.mainThread())"到所有RxBinding事件,例如" RxView.clicks()"