2017-09-02 3 views
0

J'ai un champ de saisie fournissant un Observable<String> (émettant chaque fois qu'une modification est apportée au texte d'entrée) et un bouton fournissant un Observable<Click> (émettant chaque clic).Combiner deux observables, agir sur l'un d'entre eux

Quand un click est reçu, je veux utiliser la dernière émission String pour mettre à jour un autre champ de texte.

Quelle est la meilleure façon de combiner ces deux observables? combineLatest ne fonctionnera pas parce que je recevrai un onNext chaque fois que le texte d'entrée change.

+1

Plutôt que d'essayer d'observer le champ de texte, je voudrais juste passer le même champ de texte à l'observateur du bouton. Ensuite, cliquez sur prendre la valeur actuelle de son texte et l'utiliser. – markspace

+0

@markspace J'ai juste pensé à cela aussi, mais j'ai cherché une réponse à des fins éducatives. – FWeigl

Répondre

0

WithLatestFrom fait ce que je voulais.

Utilisation:

view.sendButtonClick().withLatestFrom(view.inputText(), BiFunction<Click, String, String> { click, text -> 
     text 
    }).subscribe { 

     Log.d("xyz", it) // Logs the inputText string 

    } 
+0

Hum ... Lorsque vous recevez un clic, vous agissez sur les 2 derniers changements de texte. Pas seulement les tests. C'est ce que ce diagramme montre. Je dirais que ce n'est pas ce que vous avez décrit. – pedromss

+0

@pedromss Non, je recevrai onNext lorsqu'un clic sera émis, fournissant la dernière entrée de texte. – FWeigl