WeakReference getter返回null

时间:2018-12-05 09:29:45

标签: android mvvm kotlin viewmodel

我使用MVVM体系结构,但是有一次我将clicklistener传递给ViewModel。我在片段onCreate中进行操作-我将侦听器传递给ViewModel,并将其包装在WeakReference对象中,并作为字段存储在ViewModel中。

private var weakRefListener: WeakReference<ClickListener>? = null
private val listenerViewModel = object : ClickListener {
    override fun onClicked(id: Long) {
        weakRefListener?.get()?.onClicked(id)
    }
}

/* called in Fragment */
fun setClickListener(clickListener: ClickListener) {
    weakRefListener = WeakReference(clickListener)
}

我这样做的原因-我有一些UI元素,它们表示为数据类,并且希望在屏幕旋转后保留它们。

ViewModel的对象需要此点击侦听器,并且它们引用listenerViewModel。不幸的是,我观察到不确定的行为-有时weakRefListener?.get()返回null,而我无法预测何时。这会导致不良的用户体验,因为点击无效。

问题: -为什么会这样? -组织代码的更好方法是什么?

0 个答案:

没有答案