У меня есть моя miewModel, которую я вставляю в свой фрагмент броска ViewModelProviders.of(activity, viewModelFactory).get(MyViewModel::class.java)
.
Это нормально работает при первом создании фрагмента, но если я закрою свой фрагмент, я получу ошибку "layout must not be null
", которая указывает на некоторые из моих макетов, которые я использую в своемфрагмент.
Как я понял, это происходит потому, что привязка данных все еще имеет некоторые ссылки на мой фрагмент.Так как же это сделать?
class MyFragment: Fragment(), Injectable {
@Inject
lateinit var viewModelFactory: ViewModelProvider.Factory
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
activity?.window?.changeStatusBarColor(this.requireContext(), R.color.yellow_status_bar)
val binding: MyLayoutBinding = DataBindingUtil.inflate(inflater, R.layout.my_layout, container, false)
binding.viewModel = viewModel
viewModel.addOnPropertyChangedCallback(object : Observable.OnPropertyChangedCallback() {
override fun onPropertyChanged(sender: Observable?, propertyId: Int) {
}
}
ViewModelModule:
@Binds
@IntoMap
@ViewModelKey(MyViewModel::class)
internal abstract fun bindMyViewModel(myViewModel: MyViewModel): ViewModel