#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>()