2017-05-13 15 views
0

私はRxAndroid/RxBindingを学んでいます。私はボタンのクリックイベントで観測可能なシーケンスを停止しようとしていますが、それを行う方法はわかりません。RxAndroidでクリックすると観測対象を停止する方法は?

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
Button bt = (Button)findViewById(R.id.button); 

RxView.clicks(fab).subscribe(view ->Snackbar.make(SnakebarLayout, "Actions", Snackbar.LENGTH_LONG).setAction("Action", null).show()); 
RxView.clicks(bt).subscribe(view -> Observable.range(10, 5).subscribe(i-> Toast.makeText(this,i.toString(),Toast.LENGTH_SHORT).show())); 

あなたは私が観測シーケンスに加入して二つのボタンそれぞれを持っていることを見ることができるように、私が欲しいのです:

私は最初のボタンをクリックした場合(1)、その後、後で観測可能に他のボタンをクリックしてください最初のボタンからの操作は直ちに停止する必要があります。

(2)ボタンをクリックしてもう一度クリックすると、オブザーバブルがすぐに再開します。現時点で再びクリックすると、現在の観測可能な終了が終了してから再び開始するまで待機します。

答えて

0

まず、これらのコードはそれほど良いものではありません。

RxView.clicks(bt).subscribe(view -> Observable.range(10, 5).subscribe(i-> Toast.makeText(this,i.toString(),Toast.LENGTH_SHORT).show())); 

RxView.click(bt) 
     .flatMap(ignore -> Observable.range(10,5)) 
     .subscriber(//your toast) 

ご質問については(1)私が最初にクリックし、ボタンをクリックした場合に変更して後で他のボタンを押すと、最初のボタンからの観察可能なアクションが直ちに停止するはずです。

subscribe()メソッドは、ストリームを制御するためのスイッチであるdisposable()を返します。

disposable.dispose()は、2番目のボタンsubscribe()の中に電話するだけです。

(2)ボタンをクリックしてもう一度クリックすると、オブザーバブルが直ちに再開します。現時点で再びクリックすると、現在の観測可能な終了が終了してから再び開始するまで待機します。

このリクエストは私にとっては少し奇妙です。最初の部分はflatMapの代わりにswitchMapを使用できます。私は静かではない第二の部分を理解する。

+0

こんにちは、おかげで答えは、それは動作しません。 – user3490871

関連する問題