moxy-community / Moxy

Moxy is MVP library for Android with incremental annotation processor and ktx features
MIT License
324 stars 33 forks source link

ViewBindingHolder.kt avoid java.lang.AbstractMethodError #134

Open tim4dev opened 3 years ago

tim4dev commented 3 years ago

При использовании ViewBindingHolder.kt (это из примера package moxy.sample.ui) в некоторых кейсах получаем:

java.lang.AbstractMethodError: abstract method void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)

Лечение -- переопределить все методы в DefaultLifecycleObserver :

class ViewBindingHolder<T : ViewBinding> {
...
fun createView(lifecycleOwner: LifecycleOwner, inflater: () -> T): View {
...

lifecycleOwner.lifecycle.addObserver(object : DefaultLifecycleObserver {
            override fun onDestroy(owner: LifecycleOwner) {
                _binding = null
            }
            override fun onCreate(owner: LifecycleOwner) {}
            override fun onStart(owner: LifecycleOwner) {}
            override fun onResume(owner: LifecycleOwner) {}
            override fun onPause(owner: LifecycleOwner) {}
            override fun onStop(owner: LifecycleOwner) {}
        })
       return newBinding.root
}
}
alaershov commented 3 years ago

Странно, вроде версия java везде 1.8 стоит, и такие костыли не должны быть нужны. Можете поделиться, как воспроизвели это поведение?

tim4dev commented 3 years ago

Странно, вроде версия java везде 1.8 стоит, и такие костыли не должны быть нужны. Можете поделиться, как воспроизвели это поведение?

При использовании этого холдера в библиотеке/модуле + в дальнейшем библиотека подключается в виде aar.

alaershov commented 3 years ago

а у себя там, где использовали, java 1.8 включили?

tim4dev commented 3 years ago

а у себя там, где использовали, java 1.8 включили?

Скорее всего да 99%, но там я уже не властен, не могу точно утверждать.