OnCleared () Shared ViewModel никогда не вызывается - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть одно приложение Activity.В одной части приложения есть комбинация основных деталей, которые используют общую модель ViewModel для обмена некоторыми данными между ними.Проблема, с которой я сталкиваюсь, состоит в том, что метод onCleared () ViewModel не вызывается, даже когда оба фрагмента были уничтожены.onCleared () вызывается только когда действие уничтожено.

Это как это должно работать?Потому что это совершенно бесполезно в одной модели деятельности, потому что деятельность всегда жива.Или я что-то упустил?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Было бы немного сложно дать четкий ответ, не увидев немного кода.Мое первое предположение могло бы состоять в том, что вы могли бы охватить ViewModel своими Activity, а не самими Fragment.

//inside of fragment onCreate()

//scoped to fragment
viewModel = ViewModelProviders.of(this).get(SharedViewModel::class.java)

//scoped to activity
viewModel = ViewModelProviders.of(requireActivity()).get(SharedViewModel::class.java)

Если это так, если вы посмотрите на диаграмму для области действия ViewModel.Тогда причина, по которой onCleared() никогда не вызывается, заключается в том, что ваш Activity технически никогда не был уничтожен, поскольку именно он удерживает ваше приложение на переднем плане.

enter image description here

Если это не правильное решение вашей проблемы, то я думаю, что документы по ViewModel могут бытьхорошее место, чтобы начать искать правильный ответ.Удачного кодирования!

0 голосов
/ 21 февраля 2019

Если вы передадите это действие в ViewModelProviders.of(this), то да, это ожидаемое поведение.Чтобы область видимости моделилась только для основного и подробного фрагментов, вам, вероятно, потребуется создать для них родительский фрагмент, например, MasterDetailFragment, который содержит как MasterFragment, так и DetailsFragment.

.
...