将原始 Observable 平面化为新 Observable 后如何收听?
how to listen to the original observable after it is flatmaped to a new observable?
public Observable<Void> onFabClicked() {
return RxView.clicks(a_button);
}
{
view.onOutBoundBtClicked()
.observeOn(computationScheduler)
.map(new Func1<Void, ViewModelAction>() {
@Override public ViewModelAction call(Void aVoid) {
return new OutboundInputFieldTappedAction();
}
}).mergeWith(view.onFabClicked().flatMap(new Func1<Void, Observable<ListOfResult>>() {
@Override
public Observable<ListOfResult> call(Void avoid) {
return listRepository.getListResult("UK",
"en-GB",
).toObservable();
}
}).map(new Func1<ListOfResult, ViewViewModelAction>() {
@Override
public ViewViewModelAction call(ListOfResult ListOfResult) {
return new ListOfResultsReceivedAction(ListOfResult);
}
}))
.mergeWith(view.onFabClicked()
.observeOn(computationScheduler)
.map(new Func1<Void, ViewModelAction>() {
@Override
public ViewModelAction call(Void aVoid) {
return new SearchPanelAnimationAction();
}
}))
我有一个来自 RxView.clicks(a_button) 的 observable1,如何通过单击 observable1 创建另一个 observable2,然后将 observable1 和 observable2 发送给同一个订阅者?我尝试了将 observable1 转换为 ovservable2 的平面图,但从未听说过 observalbe1,代码是
{
view.onOutBoundBtClicked().observeOn(computationScheduler).map(new Func1() {
@Override
public ViewModelAction call(Void aVoid) {
return new OutboundInputFieldTappedAction();
}
}).mergeWith.
,为什么我总是 return XXXAction 是因为我会更改 viewModel 中的一些字段,我会使用
.withLatestFrom(viewModels, new Func2() {
@Override
public ActivityViewModel call(ViewModelAction action, ActivityViewModel activityViewModel) {
return action.modifyViewModel(activityViewModel);
}
因此,每当视图模型中发生任何更改时,我都会发出一个事件并对其执行一些操作,谢谢,伙计们。
您需要创建一个共享的可观察字段,并公开它而不是直接返回 RxView.clicks()
。
Observable<Void> fabClicks;
public void onCreate(Bundle bundle) {
...
fabClicks = RxView.clicks(a_button).share();
}
public Observable<Void> onFabClicked() {
return fabClicks;
}
public Observable<Void> onFabClicked() {
return RxView.clicks(a_button);
}
{
view.onOutBoundBtClicked()
.observeOn(computationScheduler)
.map(new Func1<Void, ViewModelAction>() {
@Override public ViewModelAction call(Void aVoid) {
return new OutboundInputFieldTappedAction();
}
}).mergeWith(view.onFabClicked().flatMap(new Func1<Void, Observable<ListOfResult>>() {
@Override
public Observable<ListOfResult> call(Void avoid) {
return listRepository.getListResult("UK",
"en-GB",
).toObservable();
}
}).map(new Func1<ListOfResult, ViewViewModelAction>() {
@Override
public ViewViewModelAction call(ListOfResult ListOfResult) {
return new ListOfResultsReceivedAction(ListOfResult);
}
}))
.mergeWith(view.onFabClicked()
.observeOn(computationScheduler)
.map(new Func1<Void, ViewModelAction>() {
@Override
public ViewModelAction call(Void aVoid) {
return new SearchPanelAnimationAction();
}
}))
我有一个来自 RxView.clicks(a_button) 的 observable1,如何通过单击 observable1 创建另一个 observable2,然后将 observable1 和 observable2 发送给同一个订阅者?我尝试了将 observable1 转换为 ovservable2 的平面图,但从未听说过 observalbe1,代码是
{
view.onOutBoundBtClicked().observeOn(computationScheduler).map(new Func1() {
@Override
public ViewModelAction call(Void aVoid) {
return new OutboundInputFieldTappedAction();
}
}).mergeWith.
,为什么我总是 return XXXAction 是因为我会更改 viewModel 中的一些字段,我会使用
.withLatestFrom(viewModels, new Func2() {
@Override
public ActivityViewModel call(ViewModelAction action, ActivityViewModel activityViewModel) {
return action.modifyViewModel(activityViewModel);
}
因此,每当视图模型中发生任何更改时,我都会发出一个事件并对其执行一些操作,谢谢,伙计们。
您需要创建一个共享的可观察字段,并公开它而不是直接返回 RxView.clicks()
。
Observable<Void> fabClicks;
public void onCreate(Bundle bundle) {
...
fabClicks = RxView.clicks(a_button).share();
}
public Observable<Void> onFabClicked() {
return fabClicks;
}