我正在学习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)如果我单击一个按钮,然后再次单击它,observable应立即重启。目前,如果我再次点击它,它将等到当前可观察完成然后再次开始。
答案 0 :(得分: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.dispose()
内拨打subscribe()
。
这个请求对我来说有点离奇。因此,第一部分您可以使用(2)如果我单击一个按钮,然后再次单击它,observable应立即重启。目前,如果我再次点击它,它将等到当前可观察完成然后重新开始。
switchMap
代替flatMap
。第二部分我不太明白。