как я могу получить доступ к общей модели представления из действия?

#android #kotlin #android-fragments #viewmodel

Вопрос:

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

     val model : sharedViewModel by activityViewModels()
 

я пытался сделать ViewModelProvider, но не знал, как это сделать правильно, потому что я кодирую с помощью kotlin

Комментарии:

1. «это показывает ошибку» — в чем ошибка? В действии вы объявляете его с помощью by viewModels() . Во фрагментах вы объявляете его с помощью by activityViewModels() .

2. боже, я собираюсь встретиться с ладонью, если это сработает, это отличный момент прямо здесь!!

3. это сработало, чувак @CommonsWare, спасибо тебе, чувак

Ответ №1:

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

Если вы также хотите, чтобы действие работало с этой моделью представления, действие объявит его с помощью by viewModels() делегата более простого свойства. Они не утруждали себя созданием activityViewModels() для какой-либо деятельности, так как это было бы просто так же, как и проще viewModels() .

Ответ №2:

Я предлагаю вам прочитать документацию по обмену данными между фрагментами

Использование активности viewModels<T>()

Использование фрагментов activityViewModels<T>()