В Java я использую RxTextView и вызываю .subscribe () во Fragment для вызова и передачи String в качестве параметра методу в Presenter.
Все отлично работает.
Java:
compositeDisposable.add(
RxTextView.textChanges(searchEditText)
.map(CharSequence::toString)
.debounce(500, TimeUnit.MILLISECONDS)
.distinctUntilChanged()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.computation())
.subscribe(query -> {
presenter.setQueryFilter(query); // query parameter: String
})
);
Я запутался с RxTextView в Kotlin, потому что в функции .subscribe (...) значение параметра - это общая дисперсия, а не только строка, как в Java.
Котлин:
compositeDisposable.add(
RxTextView.textChanges(activity.findViewById(R.id.searchEditText))
.map {CharSequence::toString}
.debounce(500, TimeUnit.MILLISECONDS)
.distinctUntilChanged()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.computation())
.subscribe { query ->
getPresenter().setQueryFilter(query.toString()) //query parameter: KFunction1<CharSequence,String>!
//query.toString gives a such result: fun kotlin.Any.toString(): kotlin.String
}
)
Как я могу получить правильное строковое значение из EditText и связать его с .subscibre (), как в Java?
РЕШЕНИЕ
Я заменил .map {CharSequence :: toString} на: .map { it.toString () }