2017-05-13 1 views
0

Ich lerne RxAndroid/RxBinding. Ich versuche, eine beobachtbare Sequenz nach einem Klick-Ereignis zu stoppen, weiß aber nicht, wie ich es machen soll.Wie man eine Observable beim Klicken in RxAndroid stoppt?

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())); 

Wie Sie sehen können, dass ich zwei Tasten jeweils zu einer beobachtbaren Sequenz gezeichnet, was ich will, ist:

(1) Wenn ich auf eine Schaltfläche klicken, zuerst, dann die andere Taste später die beobachtbare Aktionen von der ersten Schaltfläche sollten sofort gestoppt werden.

(2) Wenn ich auf eine Schaltfläche klicke und dann erneut klicke, sollte die Observable sofort neu gestartet werden. Im Moment, wenn ich es noch einmal anklicke, wird es warten, bis das aktuelle beobachtbare Ende wieder von vorne beginnt.

Antwort

0

Zuerst diejenigen Code sind nicht so gut:

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

es Wechsel in

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

Was Ihre Fragen

(1) Wenn ich zuerst, dann auf eine Schaltfläche klicken Sie auf Die andere Taste später, die beobachtbaren Aktionen von der ersten Taste sollten sofort aufhören.

Ihre subscribe() Methode gibt Ihnen einen Wegwerfartikel() zurück, mit dem Sie den Stream steuern können.

Sie könnten einfach disposable.dispose() in Ihrem zweiten Knopf subscribe() anrufen.

(2) Wenn ich auf eine Schaltfläche klicke, dann klicke erneut darauf, das Observable sollte sofort neu gestartet werden. Im Moment, wenn ich es noch einmal anklicke, wird es warten, bis das aktuelle beobachtbare Ende wieder von vorne beginnt.

diese Anfrage ein bisschen seltsam für mich. So können Sie den ersten Teil verwenden switchMap anstelle von flatMap. Der zweite Teil verstehe ich nicht leise.

+0

Hallo Danke für die Antwort, aber es funktioniert nicht. – user3490871

Verwandte Themen