RxJava2, Android, Webview Create Observable в Котлине - PullRequest
0 голосов
/ 27 января 2019

Просто начинаем с попытки "Rx-ify" некоторых событий Android в Webview.

class PageStartData(val url: String, val favicon: Bitmap?)

myWebview.webViewClient = object: WebViewClient() {

   val pageStartEvents: Observable<PageStartData> = Observable.create{ emitter->
      override fun onPageStarted(view: WebView, url: String, favicon: Bitmap){
          emitter.onNext(PageStartData(url, favicon))
      }
   }

}

И я обнаружил, что функция onPageStarted выходит за рамки лямбда-функции эмиттера.Очень просто, я уверен.Как исправить?

Вся помощь оценена.

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Проверьте это:

sealed class WebViewEvent {
    data class PageStartData(val url: String?,
                             val favicon: Bitmap?) : WebViewEvent()
}

...

class RxWebViewWrapper(private val webView: WebView) : ObservableOnSubscribe<WebViewEvent> {
    override fun subscribe(emitter: ObservableEmitter<WebViewEvent>) {
        webView.webViewClient = object :WebViewClient(){
            override fun onPageStarted(view: WebView?,
                                       url: String?,
                                       favicon: Bitmap?) {
                super.onPageStarted(view, url, favicon)
                emitter.onNext(WebViewEvent.PageStartData(url, favicon))
            }
        }
    }
}

...

val source = Observable.create<WebViewEvent>(RxWebViewWrapper(myWebview))
0 голосов
/ 27 января 2019

Это можно сделать через PublishSubject

myWebview.webViewClient = object : WebViewClient() {
        private val pageStartSubject = PublishSubject.create<PageStartData>()
        val pageStartEvents: Observable<PageStartData> = pageStartSubject

        override fun onPageStarted(view: WebView, url: String, favicon: Bitmap) {
            pageStartSubject.onNext(PageStartData(url, favicon))
        }
    }
...