如何在RxAndroid中停止一次可观察的点击?

如何在RxAndroid中停止一次可观察的点击?,android,rx-java,rx-android,rx-java2,rx-binding,Android,Rx Java,Rx Android,Rx Java2,Rx Binding,我正在学习RxAndroid/RxBinding。我试图在一个按钮点击事件中停止一个可观察到的序列,但不知道怎么做 FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); Button bt = (Button)findViewById(R.id.button); RxView.clicks(fab).subscribe(view ->Snackbar.make(SnakebarLayout, "

我正在学习RxAndroid/RxBinding。我试图在一个按钮点击事件中停止一个可观察到的序列,但不知道怎么做

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) 如果我点击一个按钮,然后再点击它,可观察的应该立即重新启动。此时,如果我再次单击它,它将等待当前可观察到的完成,然后再次开始

首先,这些代码不太好:

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(),它是一个开关,用于控制流

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

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

这个要求对我来说有点奇怪。因此,第一部分是您可以使用
switchMap
而不是
flatMap
。第二部分我不明白