#android-studio #kotlin #viewmodel
#android-studio #kotlin #viewmodel
Вопрос:
Я хочу создать ViewModel для всего приложения для отправки и получения данных между несколькими фрагментами и действиями. итак, как я могу это сделать
Комментарии:
1. Это невозможно использовать базу данных, настройки или одноэлементный объект
2. Пожалуйста, уточните вашу конкретную проблему или предоставьте дополнительные сведения, чтобы выделить именно то, что вам нужно. В том виде, в каком он сейчас написан, трудно точно сказать, о чем вы просите.
3. обычно мы используем viewmodel для использования базы данных room, поэтому мне нужно то же самое, но без базы данных; отправлять простые данные, не теряя их при любых изменениях конфигурации
Ответ №1:
Не внедряйте ViewModel, привязанный к приложению
Из статьи в Википедии:
Viewmodel MVVM — это преобразователь значений, то есть viewmodel отвечает за отображение (преобразование) объектов данных из модели таким образом, чтобы объектами можно было легко управлять и представлять. В этом отношении viewmodel является скорее моделью, чем представлением, и обрабатывает большую часть, если не всю логику отображения представления. Viewmodel может реализовать шаблон посредника, организуя доступ к внутренней логике вокруг набора вариантов использования, поддерживаемых представлением.
Из ViewModel
документации класса:
ViewModel — это класс, который отвечает за подготовку и управление данными для действия или фрагмента. Он также обрабатывает связь Activity / Fragment с остальной частью приложения (например, вызов классов бизнес-логики).
ViewModel всегда создается в связи с областью действия (фрагментом или действием) и будет сохраняться до тех пор, пока область действия активна.
Единственная ответственность ViewModel заключается в управлении данными для пользовательского интерфейса.
Четко определено, что ViewModel является связующим звеном между View и Model и не более того. В настоящее время только Activity
, Fragment
и их подклассы реализуют ViewModelStoreOwner
интерфейс, позволяющий ViewModel
использовать их.
Также Application
область ViewModel
действия нарушает важный принцип SOLID — разделение интерфейса (ISP). В нем говорится следующее:
Провайдер разделяет очень большие интерфейсы на более мелкие и более конкретные, так что клиентам нужно будет знать только о методах, которые их интересуют. Такие сжатые интерфейсы также называются ролевыми интерфейсами. ISP предназначен для разделения системы и, следовательно, упрощения ее реорганизации, изменения и повторного развертывания.
Как отправлять и получать данные между действиями и фрагментами?
Некоторые способы общения проще, чем приложение ViewModel
:
- Между действиями с помощью Намерений
- Между фрагментами через пакет, через навигационный компонент с безопасными аргументами и через ViewModel
- Между активностью и фрагментом через Fragment.setArguments()