Вам не нужна ссылка Activity, чтобы получить доступ к SharedPreferences, только ссылка Context. В MVVM ни модель, ни модель представления не должны знать о каких-либо действиях или фрагментах.
context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE)
, где PREFERENCES_NAME
- некоторая постоянная строка. Или, если вам нужен только один файл SharedPreferences для всего приложения:
PreferenceManager.getDefaultSharedPreferences(context)
Приложение можно использовать для получения контекста, используемого для получения SharedPreferences.
Если вы создаете экземпляр своей модели из вашей ViewModel , вы можете заставить вашу ViewModel расширять AndroidViewModel вместо ViewModel и указывать Application в качестве параметра конструктора. Поставщики ViewModel по умолчанию автоматически передадут Приложение.
Если ваша Модель должна создаваться где-то, кроме ViewModel, ваш класс Application может предоставить статический c доступ к самому себе, поскольку он фактически является одиночным. Он может инициализировать свойство lateinit
самого верхнего уровня в своем onCreate()
. Если у вас еще нет класса Application, вы создаете свой собственный, который расширяет Application, и вы name
класс в элементе application
XML точно так же, как вы делаете с Activity. Вы можете посмотреть инструкции о том, как это сделать. Это упоминалось во многих ответах на вопросы здесь.