我有自定义的对象集,我想在每2秒后发出一次。这意味着当我将一组项添加到ReplaySubject<>它应该每2秒访问那些逐个 onNext()
方法的对象。此对象将添加到ReplaySubject<>动态地对用户事件。这就是我使用ReplaySubject<>的原因。
我已经实现了这一点,但我想暂停并恢复这个帖子 基于一些条件,它将根据用户交互进行更改。如何实现这一点。
这是我的代码。
private ReplaySubject<CartItemToBeRemove> cartItemToBeRemoveSubject;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cart);
ButterKnife.bind(this);
cartItemToBeRemoveSubject = ReplaySubject.create();
initDeleteQueue();
}
public void initDeleteQueue() {
cartItemToBeRemoveSubject
.delay(2,TimeUnit.SECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new Observer<CartItemToBeRemove>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(CartItemToBeRemove itemToBeRemove) {
cartData.remove(itemToBeRemove.getItem());
cartListAdapter.notifyItemRemoved(itemToBeRemove.getPosition());
Log.d(TAG, "item" + deletedItem.getName());
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
我将对象添加到ReplaySubject,如下所示
cartItemToBeRemoveSubject.onNext(toBeRemove);
答案 0 :(得分:0)
您想要为可观察流添加调步。正常起搏每两秒发射一次物品,但可能会暂停并恢复。
基本的调步机制类似Observable.interval( 2, SECONDS )
,每2秒发出一次Long
。但是,您希望偶尔暂停它。我们假设我们有一个Observable<Boolean>
,当要启动调步机制时会TRUE
,而FALSE
应该暂停。
Observable<Boolean> pacingControl;
pacingControl
.switchMap( ctl -> ctl ? Observable.interval( 0, 2, SECONDS ) : Observable.never() )
.zipWith( cartItemToBeRemoveSubject, (t, item) -> item )
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe( ... );
pacingControl
可以作为主题实施,用户操作可以pacingControl.onNext( TRUE )
启动流程,也可以pacingControl.onNext( FALSE )
暂停。 switchMap()
运算符在计时器和never()
之间切换,显然从不产生任何东西。