Правильный способ сохранить состояние приложения в шаблоне MVVM в kotlin и Android - PullRequest
0 голосов
/ 07 апреля 2020

Как правильно сохранить фактическое состояние приложения в MVVM? Простой пример для описания того, что я имею в виду: у меня есть два фрагмента и одна глобальная переменная или объект моего класса. Я могу изменить эту переменную или объект на обоих фрагментах. Где я должен хранить это в коде?

Ответы [ 2 ]

2 голосов
/ 07 апреля 2020

Самый простой способ - использовать функцию расширения KTX activityViewModels<VM : ViewModel> см. здесь .

Из do c:

Возвращает свойство делегировать доступ к ViewModel родительского действия ...

Он извлечет экземпляр ViewModel, предоставленный ViewModelProviders действия, к которому прикреплены фрагменты. Таким образом, любое изменение экземпляра модели представления будет отражено на всех фрагментах.

Вот простой пример:

class MVModel: ViewModel() {
    var count = MutableLiveData(0)

    fun increment() {
        count.value = count.value!!.plus(1)
    }
}

class MFragment: Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val binding = FragmentMBinding.inflate(inflater, container, false)
        val viewModel by activityViewModels<MVModel>()
        binding.lifecycleOwner = this // <-- this enables MutableLiveData update the UI
        binding.vm = viewModel
        return binding.root
    }

}
0 голосов
/ 07 апреля 2020

Вы можете создать модель общего доступа, к которой все ваши компоненты будут иметь легкий доступ

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