如何在对新观察者进行平坦化后听取原始观察结果?

时间:2017-08-16 10:41:35

标签: android rx-java2

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的flatmap,但是从未听过observalbe1,代码是

{
    view.onOutBoundBtClicked().observeOn(computationScheduler).map(new Func1() {
        @Override
        public ViewModelAction call(Void aVoid) {
            return new OutboundInputFieldTappedAction();
        }
    }).mergeWith.

,为什么我总是返回一个XXXAction,我将更改viewModel中的一些字段,我将使用

    .withLatestFrom(viewModels, new Func2() {
    @Override
    public ActivityViewModel call(ViewModelAction action, ActivityViewModel activityViewModel) {
        return action.modifyViewModel(activityViewModel);
    }

所以当viewmodel中的某些内容发生变化时,我会发出一个事件并做一些事情,谢谢你们。

1 个答案:

答案 0 :(得分:1)

您需要创建一个共享的可观察字段,并将其公开,而不是直接返回RxView.clicks()

Observable<Void> fabClicks;

public void onCreate(Bundle bundle) {
    ...

    fabClicks = RxView.clicks(a_button).share();
}

public Observable<Void> onFabClicked() {
    return fabClicks;
}