如何在原始观察值平坦化为新的观察值之后再听原始观察值?

如何在原始观察值平坦化为新的观察值之后再听原始观察值?

问题描述:

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,我如何从这个click observable1创建另一个observable2,然后将observable1和observable2发送给同一用户?我想flatmap该转换observable1到ovservable2但随后observalbe1是从来没有听说过,代码如何在原始观察值平坦化为新的观察值之后再听原始观察值?

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

,为什么我总是返回XXXAction的是,我会改变某些领域的视图模型,我将使用

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

所以,如果有什么改变的viewmodel我会得到一个事件发射和做一些事情,谢谢,伙计。

+0

'我想flatmap该转换observable1到ovservable2但它并不work'添加代码(见[MCVE(https://stackoverflow.com/help/mcve)) – EpicPandaForce

+0

'说明问题。 “它不起作用”不是一个问题陈述。告诉我们预期的行为应该是什么。告诉我们错误信息的确切用词是什么,以及哪一行代码正在生成它。在你的问题的标题中加入一个简短的问题摘要。' – EpicPandaForce

+0

感谢您的评论,我添加了一些代码片段,正如你所看到的,我仍然想在flatmap之后使用onFabClicked observable,我该如何实现它。或任何解决方法,谢谢! – user3201520

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

Observable<Void> fabClicks; 

public void onCreate(Bundle bundle) { 
    ... 

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

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