WebView で RxJava を使用してクリック デバウンスを実装したいと考えています。
たとえば、ユーザーがリンクをすばやくクリックすると、最初のクリックだけを扱いたいとします。まず、これでいい
と思いました。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 ... ?
}
throttleFirst
正常に動作しますが、この方法では値を返すことができないことに気付きました。
質問:
のような戻り値の型を持つメソッドの場合、RxJava で値を返すにはどうすればよいshouldOverrideUrlLoading
ですか?
または、そのような場合に Rx を使用するべきではありませんか? (フラグをHandler#postDelayed
? で変更するなど、別の方法に進みます)