Android 使用RxJava返回结果值
我想在WebView中用RxJava实现点击去Bouncing。Android 使用RxJava返回结果值,android,rx-java,rx-android,Android,Rx Java,Rx Android,我想在WebView中用RxJava实现点击去Bouncing。 例如,用户快速点击链接,我只想处理第一次点击。 首先,我认为throttleFirst有助于此 private final BehaviorSubject<String> urlLoading = BehaviorSubject.create(); private final Observable<String> throttled = urlLoading.throttleFirst(CLIC
例如,用户快速点击链接,我只想处理第一次点击。
首先,我认为
throttleFirst
有助于此
private final BehaviorSubject<String> urlLoading = BehaviorSubject.create();
private final Observable<String> throttled = urlLoading.throttleFirst(CLICK_THROTTLE_MILLIS, TimeUnit.MILLISECONDS);
//...
throttled.subscribe(new Action1<String>() {
@Override
public void call(String url) {
something(url); // :/
}
});
//...
// WebView callback
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// return something(); // original
// i want to throttle events and return something() if it's ok or return just true for debounced events
urlLoading.onNext(url);
return ... ?
}
private final BehaviorSubject urlLoading=BehaviorSubject.create();
private final Observable throttled=urlLoading.throttleFirst(单击THROTTLE,时间单位为毫秒);
//...
throttled.subscribe(新操作1(){
@凌驾
公共无效调用(字符串url){
某物(url);/:/
}
});
//...
//WebView回调
公共布尔值shouldOverrideUrlLoading(WebView视图,字符串url){
//返回某物();//原始
//我想限制事件并返回一些()如果可以,或者对于取消宣布的事件返回true
urlLoading.onNext(url);
回来
}
throttleFirst
工作正常,但我注意到我无法以这种方式返回值
问题:当返回类型为
的方法应该重写eurlloding
?或者我不应该在这种情况下使用Rx吗?(通过另一种方式,如通过
Handler#postDelayed
?)更改标志)您希望它首先听到的单击节流的将发出的
由于您希望返回一个布尔值
,因此必须同步,然后才能阻塞
使用RxJava(未经测试)可以做什么:
- 发出
某物(url)代码>结果
拍摄(1)
拍摄第一个事件
toBloking
阻止RxJava流并保持同步李>
- 返回该值
例如:
public boolean shouldOverrideUrlLoading(WebView view, String url) {
urlLoading.onNext(url);
return throttler
.map(url -> something(url))
.take(1)
.toBlocking()
.single();
}
别忘了删除节流阀子描述代码。RxJava似乎不适合此任务。thx,但这种方法每次都会产生新的可观察对象,效果不好