ViewModelProviders устарел, что следует заменить? - PullRequest
1 голос
/ 09 ноября 2019

Я использую ViewModelProviders. Но сегодня, после обновления библиотеки, появилось 30 сообщений. Как я понимаю ViewModelProviders больше не был доступен, и вам нужно заменить его, я посмотрел в developer.google, но не понял, что заменить? Мой код:

inline fun <reified T : ViewModel> FragmentActivity.injectViewModel(factory: ViewModelProvider.Factory): T {
    return ViewModelProviders.of(this, factory)[T::class.java]
}

inline fun <reified T : ViewModel> Fragment.injectViewModel(factory: ViewModelProvider.Factory): T {
    return ViewModelProviders.of(this, factory)[T::class.java]
}

и вы можете объяснить, почему он устарел?

1 Ответ

3 голосов
/ 10 ноября 2019

Согласно документации :

Использовать делегат свойства by viewModels() Kotlin или ViewModelProvider.ViewModelProvider (ViewModelStoreOwner, Factory) , передавая вфрагмент и фабрика.

Таким образом, вы можете заменить свои расширения на:

inline fun <reified T : ViewModel> FragmentActivity.injectViewModel(factory:  ViewModelProvider.Factory): T {
    return ViewModelProvider(this, factory)[T::class.java]
}

inline fun <reified T : ViewModel> Fragment.injectViewModel(factory: ViewModelProvider.Factory): T {
    return ViewModelProvider(this, factory)[T::class.java]
}

И, согласно сообщению об ошибке, вы можете вместо этого использовать расширения свойств Kotlin в fragment-ktx и activity-ktx зависимостей и полностью удалите методы расширения.

А именно, by viewModels и by activityViewModels для фрагментов:

// Retrieve the ViewModel associated with this Fragment
val viewModel: MyVewModel by viewModels { myFactory }

// Retrieve the ViewModel associated with the activity
val activityViewModel: MyVewModel by activityViewModels { myFactory }

Или, если вы обращаетесь к ViewModel из самой своей деятельности, вы бы использовали by viewModels:

// In an Activity, you can retrieve a ViewModel scoped to the Activity
// by using viewModels
val viewModel: MyVewModel by viewModels { myFactory }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...