Я использую архитектуру 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)
}
Причина, по которой я это делаю - у меня есть элементы пользовательского интерфейса, которыепредставлены как классы данных, и я хочу сохранить их после поворота экрана.
В ViewModel есть объекты, которым нужен этот clicklistener, и они ссылаются на listenerViewModel
.К сожалению, я наблюдал недетерминированное поведение - иногда weakRefListener?.get()
возвращает null
, и я не могу предсказать, когда.Это приводит к плохому пользовательскому опыту, так как щелчок не работает.
Вопрос: - почему это происходит?- как лучше организовать код?