IllegalArgumentException: Cannot add the same observer with different lifecycles

场景:dialogfragment(tabLayout+viewpager) + 两个Afragment

解决方案一:
class SafeMutableLiveData<T> : MutableLiveData<T>() {

private var weakLifecycleOwner: WeakReference<LifecycleOwner>? = null

override fun observe(owner: LifecycleOwner, observer: Observer<in T>) {
    weakLifecycleOwner?.get()?.let {
        removeObservers(it)
    }
    weakLifecycleOwner = WeakReference(owner)
    super.observe(owner, observer)
}

override fun setValue(value: T) {
    try {
        super.setValue(value)
    } catch (e: Exception) {
        super.postValue(value)
    }
}}

解决方案二
onViewCreated setUserVisibleHint 判断 if (userVisibleHint && isVisible) viewmodel 实现observe 也可以解决这种问题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容