Доступ к ViewModel в ParentFragment из ChildFragment с помощью viewModels - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь получить доступ к ParentViewModel для ParentFragment из ChildFragment, используя viewModels. Это мой код.


// In ParentFragment

class ParentFragment : Fragment() {
    val parentViewModel: ParentViewModel by viewModels {
        ParentViewModelFactory(getRepository())
    }
    ...
}

// In ChildFragment

class ChildFragment : Fragment() {
    val parentViewModel: ParentViewModel by viewModels(
        { requireParentFragment() }
    )
    ...
}

Однако этот код работает только тогда, когда я устанавливаю переменную LiveData в ParentViewModel и ParentFragment наблюдаю за ней следующим образом:

parentViewModel.text.observe(this) {
    toast(it)
}

Мне нет смысла наблюдать за ViewModel изнутри ParentFragment. Мне это нужно только для определения lifecycle для ChildFragments.

Если я избавлюсь от приведенного выше наблюдения, я получаю следующую ошибку:

'java .lang.RuntimeException: невозможно создать экземпляр класса ParentViewModel'
Как я могу получить доступ к ChildFragments ParentViewModel без настройки фиктивных объектов живых данных, чтобы ParentFragment мог их наблюдать.

1 Ответ

1 голос
/ 27 мая 2020

В ChildFragment вы должны передать factory при его инициализации. Попробуйте это

class ChildFragment : Fragment() {
    val parentViewModel: ParentViewModel by viewModels(
        { requireParentFragment() }
    ) { ParentViewModelFactory(getRepository()) }
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...