RoboSwag/lifecycle
crain 3a6afded87 Merge branch 'master' into ubrir_master/update_roboswag
# Conflicts:
#	kotlin-extensions/build.gradle
#	livedata-location/build.gradle
#	navigation-new/build.gradle
#	navigation/build.gradle
#	navigation/src/main/java/ru/touchin/roboswag/components/navigation/TouchinApp.java
#	recyclerview-adapters/build.gradle
#	recyclerview-calendar/build.gradle
#	rx-extensions/build.gradle
2020-12-27 17:30:50 +05:00
..
src/main Merge branch 'master' into ubrir_master/update_roboswag 2020-12-27 17:30:50 +05:00
.gitignore Lifecycle modules refactor 2018-10-16 16:50:44 +03:00
README.md Fix submodules' READMEs 2019-09-10 13:58:03 +03:00
build.gradle fix errors from wrong gradle setup in new modules 2020-09-09 16:50:32 +03:00

README.md

lifecycle

Модуль содержит обертку над ViewModelProviders для работы с ViewController и обертки для передачи событий из ViewModel во ViewController.

Основные интерфейсы и классы

LifecycleViewModelProviders - объект для получения ViewModelProvider. Содержит функцию of, которая принимает LifecycleOwner и возвращает специфичный для него ViewModelProvider.

SingleLiveEvent - событие - одиночка. Посылает события только один раз. Наследуется от MutableLiveData и переопределяет методы observe и setValue.

ContentEvent - событие, обертка над данными. Дочерние классы:

  • Loading - символизирует состояние загрузки,
  • Success - символизирует успешное событие,
  • Error - символизирует ошибку,
  • Complete - символизирует завершение события.

Event - аналогичен ContentEvent, только не содержит никакой информации о данных. Нужен для оповещения о наступлении одного из следующих событий: Loading, Complete или Error.

Примеры

Получение ViewModel во ViewController.

private val viewModel = LifecycleViewModelProviders.of(this).get(SomeViewModel::class.java)

Подписка на SingleLiveEvent.

// во ViewModel
val event = SingleLiveEvent<Event>()

// во ViewController
event.observe(this, Observer { event ->
    when (event) {
        is Event.Loading -> ::onEventLoading
        is Event.Complete -> ::onEventComplete
        is Event.Error -> ::onEventError
    }
})