RxAndroidボタンクリックオブザーバー?

A.ブタキディス

プログラマーの皆さん、こんにちは。

私は RxAndroid を使用して、ボタンが押されたときに 3 秒ごとにインターバル API 呼び出しを行っています。

private final CompositeDisposable disposables = new CompositeDisposable();

Observable fetchWeatherInterval = Observable.interval(3, TimeUnit.SECONDS)
        .map(new Function<Long, String>() {
            @Override
            public String apply(Long aLong) throws Exception {
                return getWeather("http://samples.openweathermap.org/data/2.5/weather?", "London,uk", "b1b15e88fa797225412429c1c50c122a1");
            }
        })
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread());

Observer displayWeatherInterval = new Observer<String>() {

    @Override
    public void onError(Throwable e) {
        Log.e("Throwable ERROR", e.getMessage());
    }

    @Override
    public void onComplete() {
    }

    @Override
    public void onSubscribe(Disposable d) {
        disposables.add(d);
    }

    @Override
    public void onNext(String value) {
        textViewWeatherInterval.append(value);
    }
};

buttonFetchIntervalWeather.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            fetchWeatherInterval.subscribe(displayWeatherInterval);
        }
    });

私の質問は、ボタン (または onClick リスナー) を Observable にして他のものとチェーンする方法があるかどうかです。

buttonFetchIntervalWeather.subscribe(fetchWeatherInterval); のようなもの。

ソウラブ

RxBinding を使用する

Subscription s = RxView.clicks(button)
        .throttleFirst(5, TimeUnit.SECONDS) // maybe you want to ignore multiple clicks
        .flatMap(foo -> fetchWeatherInterval)
        .subscribe(displayWeatherInterval);

throttleFirst次の 5 秒間、さらにイベントを停止するだけなので、ユーザーがボタンを複数回クリックしても、次の 5 秒間は同じイベントfetchWeatherIntervalが再びトリガーされることはありません。

flatMapあるオブザーバブルの出力を別のオブザーバブルに、この場合はクリック イベントから に変換しますfetchWeatherInterval詳細情報が必要な場合は、ドキュメントをお読みください。

また、RxJava2 も同様に機能します。RxJava1 については、これに回答しました。サブスクリプションを使い捨てに変更するだけです。

使用Observable.create():

Observable.create(new Action1<Emitter<View>>() {
    @Override
    public void call(Emitter<View> emitter) {
        emitter.setCancellation(new Cancellable() {
            @Override
            public void cancel() throws Exception {
                button.setOnClickListener(null);
                emitter.onCompleted();
            }
        });
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                emitter.onNext(v);
            }
        });
    }
}, Emitter.BackpressureMode.DROP);

またはラムダで:

Observable.create(emitter -> {
    emitter.setCancellation(() -> {
        button.setOnClickListener(null);
        emitter.onCompleted();
    });
    button.setOnClickListener(emitter::onNext);
}, Emitter.BackpressureMode.DROP);

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ブラウザのスクロールバーをキーボードのボタンでクリック

分類Dev

ボタンをクリックして監視するライブデータオブザーバーを削除/追加するハンドル

分類Dev

画面が回転したときにボタンをクリックすると、ライブデータオブザーバーが表示されます

分類Dev

オブザーバーパターンとリアクターパターン

分類Dev

キーオブザーバーイベントエラーをインクリメントするLaravelカスタムピボット

分類Dev

Magentoカートの編集ボタンをクリックすると、どのオブザーバーが呼び出されますか?

分類Dev

ボタンクリック時のキーによるオブジェクトへのVueバインド値

分類Dev

RxAndroid:シンプルなホットオブザーバブルを作成する

分類Dev

Javaのオブザーバーパターンとジェネリックの問題

分類Dev

ジェネリックスを使用したC#オブザーバーパターン

分類Dev

ジェネリックを使用したオブザーバーパターンのキャストなし

分類Dev

Androidでのオブザーバーのリファクタリング

分類Dev

Androidでのオブザーバーのリファクタリング

分類Dev

シンボリックライブラリのデザインパターン

分類Dev

Rails:バックボーン+ターボリンクハイブリッドルーティング

分類Dev

サブスクリプションコールバックの前にオブザーバブルをインターセプトする

分類Dev

クリック可能なdivオーバーレイをボタンにする

分類Dev

Webブラウザのバックボタンの使い方は?JavaWebアプリケーションで

分類Dev

iOSポップオーバーブロック呼び出しボタン

分類Dev

ブラウザアクションラジオボタンクリック

分類Dev

バックボーンマリオネットの並べ替え可能、フィルタリング可能、ユーザーリスト?

分類Dev

Knockout jsテーブルの行のクリックにより、ラジオボタンのクリックバインディングが中断されます

分類Dev

被験者をオブザーバーにマッピングする-オブザーバーパターンGoFブック

分類Dev

リーンバックのタイトルビューで複数のオーブボタンまたは他のボタンを使用する

分類Dev

セレンウェブドライバーのボタンクリック-java

分類Dev

コールバック/リスナーを使用したRxJavaオブザーバブルのチェーン

分類Dev

フラッターオーバーフロー位置ボタンはクリックできません

分類Dev

Angular-クリックするとクリアオブザーバブル

分類Dev

Webブラウザでコンボボックスをオートコンプリートする方法は?

Related 関連記事

  1. 1

    ブラウザのスクロールバーをキーボードのボタンでクリック

  2. 2

    ボタンをクリックして監視するライブデータオブザーバーを削除/追加するハンドル

  3. 3

    画面が回転したときにボタンをクリックすると、ライブデータオブザーバーが表示されます

  4. 4

    オブザーバーパターンとリアクターパターン

  5. 5

    キーオブザーバーイベントエラーをインクリメントするLaravelカスタムピボット

  6. 6

    Magentoカートの編集ボタンをクリックすると、どのオブザーバーが呼び出されますか?

  7. 7

    ボタンクリック時のキーによるオブジェクトへのVueバインド値

  8. 8

    RxAndroid:シンプルなホットオブザーバブルを作成する

  9. 9

    Javaのオブザーバーパターンとジェネリックの問題

  10. 10

    ジェネリックスを使用したC#オブザーバーパターン

  11. 11

    ジェネリックを使用したオブザーバーパターンのキャストなし

  12. 12

    Androidでのオブザーバーのリファクタリング

  13. 13

    Androidでのオブザーバーのリファクタリング

  14. 14

    シンボリックライブラリのデザインパターン

  15. 15

    Rails:バックボーン+ターボリンクハイブリッドルーティング

  16. 16

    サブスクリプションコールバックの前にオブザーバブルをインターセプトする

  17. 17

    クリック可能なdivオーバーレイをボタンにする

  18. 18

    Webブラウザのバックボタンの使い方は?JavaWebアプリケーションで

  19. 19

    iOSポップオーバーブロック呼び出しボタン

  20. 20

    ブラウザアクションラジオボタンクリック

  21. 21

    バックボーンマリオネットの並べ替え可能、フィルタリング可能、ユーザーリスト?

  22. 22

    Knockout jsテーブルの行のクリックにより、ラジオボタンのクリックバインディングが中断されます

  23. 23

    被験者をオブザーバーにマッピングする-オブザーバーパターンGoFブック

  24. 24

    リーンバックのタイトルビューで複数のオーブボタンまたは他のボタンを使用する

  25. 25

    セレンウェブドライバーのボタンクリック-java

  26. 26

    コールバック/リスナーを使用したRxJavaオブザーバブルのチェーン

  27. 27

    フラッターオーバーフロー位置ボタンはクリックできません

  28. 28

    Angular-クリックするとクリアオブザーバブル

  29. 29

    Webブラウザでコンボボックスをオートコンプリートする方法は?

ホットタグ

アーカイブ