SharedViewModel не очищается при извлечении фрагмента - PullRequest
0 голосов
/ 16 марта 2020

Я использую модель общего представления, например здесь

Но проблема в том, что когда я очищаю свой последний фрагмент, я хочу очистить модель представления или уничтожить ее экземпляр, но каким-то образом он выживает, когда я оставляю последний фрагмент, который его использует

Как я могу программно очистить эту модель представления?

Я использую ее вот так

Фрагмент A

private val model: SharedViewModel by activityViewModels()

    override fun onViewCreated() {

     model.getTotal().observe(viewLifecycleOwner, Observer { cartTotal ->
                total = cartTotal
            })

    }

Из фрагмента BI отправлено всего

Фрагмент B

private val model: SharedViewModel by activityViewModels()

    override fun onViewCreated() {

     model.setTotal = 10
}

Но при выходе из фрагмента A с этими данными (делая popBackStack, поскольку я использую компоненты навигации), он не очищается вместо этого, когда я снова открываю свой фрагмент, данные остаются там

Я подозреваю, что модель представления связана с моей Контейнерной активностью, а не с жизненным циклом самих фрагментов, поэтому

Как можно Я удаляю экземпляр или очищаю свой viewmdel, когда я нажимаю на свой последний фрагмент?

Спасибо

1 Ответ

1 голос
/ 16 марта 2020

Если вы хотите получить ViewModel, связанную с родительским фрагментом, ваш внутренний фрагмент должен соответствовать by viewModels JavaDo c и использовать:

val viewmodel: MYViewModel by viewmodels ({requireParentFragment()})

Это говорит используйте родительский фрагмент в качестве владельца вашей ViewModel.

(родительский фрагмент будет использовать by viewModels(), поскольку он обращается к своим собственным ViewModel)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...