>source

Android의 웹뷰 이벤트 중 일부를 "Rx-ify"하려고 시작했습니다.

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 함수가 이미 터 람다 함수의 범위를 벗어났습니다. 매우 간단합니다. 수정하는 방법?

모든 도움을 주셔서 감사합니다.


  • 답변 # 1

    확인 :

    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))
    
    

  • 답변 # 2

    게시 제목을 통해 수행 할 수 있습니다

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

  • 이전 c# - 다른"프로젝트"에서 프로젝트 참조를 만들려면 어떻게해야합니까?
  • 다음 go - golang 채널 - 시간 종료 패턴이 예로 작동하지 않음