RxTextView в Kotlin не может извлечь строку из KFunction1 - PullRequest
0 голосов
/ 02 июля 2018

В 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 () }

1 Ответ

0 голосов
/ 03 июля 2018

Изменение

map {CharSequence::toString}

до

map (CharSequence::toString)
...