ViewModel est l'une des meilleures choses dans Android Jetpack pour permettre à la logique de s'éloigner de l'activité .
Cependant, le ViewModel a un gros repli, il n'est pas facile d'injecter des dépendances tout en l'injectant dans l'activité. J'explore de nombreuses façons selon cet article , et aucune d'entre elles n'est idéale.
Heureusement maintenant avec Dagger Hilt , cela est rendu beaucoup plus possible.
En supposant que j'ai une activité avec son ViewModel. Il y a trois choses que l'activité doit transmettre au modèle de vue
private val viewModel: MyViewModel by viewModels{
MyViewModelFactory(this, Repository(),
intent.extras)
}
class MyViewModelFactory(
owner: SavedStateRegistryOwner,
private val repository: Repository,
defaultArgs: Bundle? = null
) : AbstractSavedStateViewModelFactory(owner, defaultArgs) {
override fun <T : ViewModel> create(
key: String, modelClass: Class<T>, handle: SavedStateHandle
): T {
return MyViewModel(
repository, handle
) as T
}
}
Dagger Hilt est un Dagger simplifié pour Android en particulier. La configuration est relativement simple. Consultez les informations ci-dessous pour la configuration initiale.
Dagger Hilt: Encore plus court et plus facile!Une fois que vous avez configuré Dagger Hilt pour votre projet, nous pouvons maintenant travailler sur l'injection ViewModel.
Pour l'utiliser @HiltViewModel, vous devrez ajouter ces 2 bibliothèques en plus des bibliothèques Dagger Hilt ajoutées comme partagées dans l'article ci-dessus.
implementation "androidx.hilt:hilt-lifecycle-viewmodel
:1.0.0-alpha03"
kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha03'
@HiltViewModel
class MyViewModel @Inject constructor(
private val repository: Repository,
private val savedStateHandle: SavedStateHandle
) : ViewModel(), LifecycleObserver {
class MyViewModel @ViewModelInject constructor(
private val repository: Repository,
@Assisted private val savedStateHandle: SavedStateHandle
) : ViewModel(), LifecycleObserver {
Avec cela en place, vous n'avez plus besoin de ViewModelFactory! Tout est fait pour vous! Dans votre activité, vous pouvez maintenant simplement utiliser KTX viewModels()directement.
private val viewModel: MyViewModel by viewModels()
J'ai créé un exemple de conception de travail ici . Fourni ci-dessous pour une comparaison simple et rapide de
@ViewModelInjectet Dagger Hilt.
Si vous trouvez cela utile, l'article ci-dessous pourrait également être utile.
Transmission des données d'intention d'activité à ViewModel via l'injectionUn guide étape par étape pour migrer de Dagger à Hilt dans un projet multi-module. Structure du projet Pour visualiser le projet, il contient plusieurs modules NetworkModule, StorageModule, CommonModule, FeatureModule etc.
Dans ce guide complet, nous explorerons les compétences essentielles requises pour les développeurs iOS juniors. Des langages de programmation comme Swift et Objective-C à la collaboration et à la communication, nous couvrirons tout ce qu'un développeur iOS junior doit savoir pour réussir sur le marché concurrentiel d'aujourd'hui.
(Attention - Ceci est une satire, destinée à être joyeusement subversive - Certainement pas pour les enfants) Vous avez vu votre mère et votre père se cacher dans la cuisine et fumer ces cigarettes malodorantes. Ils vous disent.
Par Alyson Lee, conseillère en gestion des affaires gouvernementales Le processus annuel d'affectation des crédits du gouvernement fédéral est au cœur de nos efforts pour financer l'élimination du dioxyde de carbone (CDR). Chaque année, Carbon180 soumet des demandes à divers bureaux du Congrès pour aider à orienter les flux de dollars de l'année prochaine.
Pour éviter toute ambiguïté, les termes suivants seront utilisés ; Authentificateur ; Le téléphone mobile utilisé pour effectuer la connexion au site Web ; Le site Web ou l'application que l'utilisateur utilise pour effectuer la demande de connexion au service ; Le fournisseur fournissant le service donné, par exemple
[Alerte de déclenchement : cet essai comprend des captures d'écran de personnes faisant l'éloge du meurtrier de Jordan Neely.] Les responsables de l'application des lois ont finalement - et peut-être à contrecœur - inculpé Daniel Penny, l'homme qui a étouffé Jordan Neely jusqu'à sa mort, pour cet homicide.