Хорошо, так что согласно вашему комментарию это должно быть что-то вроде:
class A {
public final Observable<String> observable = Observable
.just("some string")
.replay(1).refCount()
}
class B(A aObject) {
subscription = aObject
.map { /*Do something on "some string"*/ }
.subscribe(...)
}
Обратите внимание, что .replay(1).refCount()
необходимо, если вы собираетесь использовать эту наблюдаемую более одного раза (для создания какой-то другой наблюдаемой и подпишитесь на это в другом месте) И если это какие-то данные, то Наблюдаемые (получение данных из API / БД).
Но если observable
- это не "получение данных откуда-то", а какое-то чувствительное ко времени действие (например, щелчок пользователя, прокрутка и т. Д. c.), Лучше использовать .share()
вместо .replay(1).refCount()
EDITED
в соответствии с вашим комментарием о клике: я рекомендую использовать lib . При этом ваш код будет выглядеть так:
class A {
public final Observable<String> observable = someButton.clicks()
.map { /* pass data you want here (get text from EditText)*/ }
.share()
}
class B(Observable<String> observable) {
subscription = observable
.map { /*Do something on "some string"*/ }
.subscribe(...)
}
НО, если вы хотите сделать его еще более «RX», или вам нужно будет использовать текст из editText где-то еще, вы можете сделать так:
class A {
public final Observable<Void> clickObservable =
someButton.clicks().share()
public final Observable<String> textObservable = editText.textChanges()
.map { it.toString }
.share()
}
class B(Observable<String> textObservable, Observable<Void> clickObservable) {
subscription = clickObservable
.withLatestFrom { click, text -> text }
.subscribe(...)
// textObservable can be used more here
}