如何在RxAndroid中单击时停止观察点?

问题描述:

我正在学习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)如果我点击一个按钮,然后再次点击它,observable应该立即重新启动。此刻,如果我再次点击它,它将等待,直到当前可观察的结束再次开始。

首先这些代码是不那么好:

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()您的subscribe()方法将返回一个一次性(),它是一个开关,让您控制流。

您可以在第二个按钮的subscribe()中调用disposable.dispose()

(2)如果我点击一个按钮,然后再次单击它,observable应该立即重新启动。此刻,如果我再次点击它,它将等待,直到当前可观察的结束再次开始。

这个要求对我来说有点奇怪。所以第一部分你可以使用switchMap而不是flatMap。第二部分我不安静的理解。

+0

你好,谢谢你的答案,但它不起作用。 – user3490871