"Реактивизация" слушателей. Kotlin, Extentions, Android и Reactive

Feb 03, 2016 14:20



В сегодняшней заметке хочу рассказать о практике реактивного программирования для Android с использование kotlin.

Дано: есть компонент кастомный (конкретно https://github.com/MiguelCatalan/MaterialSearchView)

Задача: запрашивать данные с сервера, используя MaterialSearchView используя RxJava 😉

Немного поразмыслив получаем задачу в таком виде: обернуть стандартный слушатель MaterialSearchView… ну использовав возможности Kotlin extentions.

Код (обёртка):

public fun MaterialSearchView.asObserver(): Observable{
return Observable.create { subscriber ->
var watcher= object: MaterialSearchView.OnQueryTextListener{
override fun onQueryTextSubmit(query: String?): Boolean {
if (!subscriber.isUnsubscribed) {
subscriber.onNext(query)
return true
}
return false
}

override fun onQueryTextChange(newText: String?): Boolean {
if (!subscriber.isUnsubscribed) {
subscriber.onNext(newText)
return true}
return false}
}
this.setOnQueryTextListener(watcher)
}}

В итоге, для запросов получается примерно такой код:

fun searchHandler(){
searchView.asObserver()
.debounce(500, TimeUnit.MILLISECONDS)
.subscribe {Запрос_на_сервер(it.toString)}
}
(в коде задержка в 500 мл сек, чтобы не мучить сервер зря)

Вот в принципе и все.

Маленький вывод: реактивность рулит) С kotlin все очень хорошо вяжется и нет проблем.

Ошибки, соображения и предложения оставляйте в комментариях.

Подробнее как обернуть слушатель тут: https://github.com/JakeWharton/RxBinding

reactive, kotlin, android

Next post
Up