androidbroadcast / ViewBindingPropertyDelegate

Make work with Android View Binding simpler
https://proandroiddev.com/make-android-view-binding-great-with-kotlin-b71dd9c87719
Apache License 2.0
1.42k stars 102 forks source link

java.lang.IllegalStateException #43

Closed terrakok closed 3 years ago

terrakok commented 3 years ago

Version 1.4.1

java.lang.IllegalStateException: 
  at by.kirich1409.viewbindingdelegate.FragmentViewBindingProperty.androidx.fragment.app.Fragment.getViewLifecycleOwner (:4)
                                                                   getLifecycleOwner
                                                                   getLifecycleOwner
  at by.kirich1409.viewbindingdelegate.LifecycleViewBindingProperty.getValue (:1)
                                                                    getValue
  at my.app.base.WebFragment.getVb (Unknown Source:7)
  at my.app.base.WebFragment$onViewCreated$$inlined$with$lambda$2.my.app.base.WebFragment.access$getVb$p (:1)
                                                                                    onProgressChanged
  at Fa.d (chromium-TrichromeWebViewGoogle.apk-stable-410410183:3)
  at Cs.handleMessage (chromium-TrichromeWebViewGoogle.apk-stable-410410183:57)
  at android.os.Handler.dispatchMessage (Handler.java:107)
  at android.os.Looper.loop (Looper.java:224)
  at android.app.ActivityThread.main (ActivityThread.java:7560)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:539)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:950)

class WebFragment : BaseFragment(R.layout.fragment_web) {
    private val vb by viewBinding(FragmentWebBinding::bind)

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
      with(vb.webview) {
            settings.javaScriptEnabled = true
            webViewClient = object : WebViewClient() {...}
            webChromeClient = object : WebChromeClient() {
                override fun onProgressChanged(view: WebView?, newProgress: Int) {
                    super.onProgressChanged(view, newProgress)
                    vb.progressView.root.isVisible = newProgress in 0..99
                }
            }
      }
    }
}

There is not issue for version 1.1.0

terrakok commented 3 years ago

Idea: user opened and instantly closed fragment with webview but webview callback onProgressChanged was called after onDestroyView

terrakok commented 3 years ago

I've fixed:

override fun onDestroyView() {
    super.onDestroyView()
    vb.webview.destroy()
}
kirich1409 commented 3 years ago

This is interesting! Thanks