Получение ссылки MainActivity в шаблоне mvvm - PullRequest
0 голосов
/ 20 апреля 2020

Я изучаю шаблон MVVM в android, и в моем классе моделей я хочу использовать общие настройки, поэтому мне нужна ссылка на активность: val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE). Это простое приложение с одним действием и несколькими фрагментами. Каков наилучший способ получить ссылку на активность, когда в приложении есть только одна активность?

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

Вам не нужна ссылка 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. Вы можете посмотреть инструкции о том, как это сделать. Это упоминалось во многих ответах на вопросы здесь.

1 голос
/ 20 апреля 2020

У вас есть только одно действие, поэтому я предполагаю, что это действие хоста для всех фрагментов. Чтобы получить доступ к экземпляру действия из фрагментов, вы можете вызвать метод getActivity () внутри фрагментов.

https://developer.android.com/reference/android/app/Fragment#getActivity ()

Однако, если вы хотите получить доступ к вашим общим настройкам вне области действия следует использовать PreferenceManager Apis, который позволяет создавать и получать доступ к общим настройкам для области приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...