В чем разница между ViewModelProviders и классом ViewModelProvider?

Я видел два класса с похожим названием, ViewModelProviders и ViewModelProvider. Кто-нибудь может объяснить, в чем разница между этими классами? какой класс на самом деле предоставляет ViewModel?

ViewModelProviders устарел. Используйте ViewModelProvider(this).get(YourViewModel::class.java).
CoolMind 30.03.2021 12:53
23
1
10 678
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

вьюмоделпровидерс(принадлежит артефакту Maven android.arch.lifecycle:extensions) — это класс из пакета android.arch.lifecycle, который содержит служебные методы для класса ViewModelStore и возвращает вам объект класса ViewModelProvider, когда вы используете из него метод of().

Таким образом, вы можете думать о нем как о оболочке класса библиотеки для ViewModelProvider.

С другой стороны, вьюмоделпровидер(принадлежит артефакту Maven android.arch.lifecycle:viewmodel) — это класс, предоставляющий ViewModels для области действия. Так что ViewModelProvider по умолчанию для Activity или Fragment можно получить из класса ViewModelProviders.

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

Редактировать:

После ВьюМодель версии 2.2.0:

Класс ViewModelProviders устарел, и теперь мы можем использовать ViewModelProvider напрямую, создав его новый экземпляр для получения ViewModel.

Что-то вроде этого: ViewModelProvider(this).get(SomeViewModel::class.java)

Какой API мы должны использовать тогда?

IgorGanapolsky 26.07.2020 21:45

@IgorGanapolsky Если вы используете последнюю альфа-зависимость ViewModel, то этот API изменил то, как мы использовали для получения ViewModel из ViewModelProviders.

Jeel Vankhede 27.07.2020 08:43

@JeelVankhede нужна ваша помощь здесь stackoverflow.com/questions/64421965/…

IRON MAN 19.10.2020 08:52

Это очень мило. Спасибо, бро :)

Vahit Keskin 22.06.2021 09:12

Класс ViewModelProviderS предоставляет экземпляры класса ViewModelProvider. Ваш вызов ViewModelProviders.of("this") создает и возвращает ViewModelProvider, связанный с действием.

ViewModelProvider, с другой стороны, предоставляет экземпляры ViewModel действия. Вызов ViewModelProviders.get(ExampleViewModel::class.java) возвращает экземпляр класса ExampleViewModel.

Эти функции обычно идут вместе, например:

ViewModelProviders.of("this").get(ExampleViewModel::class.java)

@andritK, кажется, ViewModelProviders устарела. В документах говорится, что мы можем сразу использовать ViewModelProviders в этом случае. тогда как насчет изменения приведенных ниже кодов на следующие: ОТ

inline fun <reified T : ViewModel> Fragment.viewModel(factory: ViewModelProvider.Factory, body: T.() -> Unit): T {
    val vm = ViewModelProviders.of(this, factory)[T::class.java]
    vm.body()
    return vm
}

К

inline fun <reified T : ViewModel> Fragment.viewModel(factory: ViewModelProvider.Factory, body: T.() -> Unit): T {
    val vm = ViewModelProvider(this, factory).get(T::class.java)
    vm.body()
    return vm
}

Does this work?

Другие вопросы по теме