Injektio ViewModeleihin
Käyttäkää @HiltViewModel-annotaatiota selkeään injektioon.
Injektio ViewModeleihin on ilmainen Android Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Android Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Android Academy-kurssilla on yhteensä 4 oppituntia.
ViewModelien injektointi Hiltillä
ViewModelit ovat erityisiä: kehys luo ne factoryn avulla. Hilt integroituu tähän @HiltViewModel-annotaation kautta.
ViewModelin annotointi
Merkitkää ViewModel annotaatiolla @HiltViewModel ja sen konstruktori annotaatiolla @Inject.
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
@HiltViewModel
class UserViewModel @Inject constructor(
private val repo: UserRepository
) : ViewModel()Mitä Hilt tarjoaa
Hilt etsii jokaisen konstruktoriparametrin riippuvuusgraafista. Kunhan UserRepository on sidottu (Modulen tai konstruktorin kautta tapahtuvan injektoinnin avulla), Hilt tarjoaa sen automaattisesti.
ViewModelin hakeminen Composessa
Hakekaa Hiltin tarjoama ViewModel käyttämällä hiltViewModel()-funktiota Composablen sisällä.
import androidx.hilt.navigation.compose.hiltViewModel
@Composable
fun UserScreen(
vm: UserViewModel = hiltViewModel()
) {
val state by vm.uiState
.collectAsStateWithLifecycle()
}Isännän on oltava aloituspiste
Jotta hiltViewModel() toimisi, isännöivällä Activitylla on oltava annotaatio @AndroidEntryPoint. Näin Compose yhdistyy Hilt-graafiin.
@AndroidEntryPoint
class MainActivity : ComponentActivity()Muiden riippuvuuksien injektointi
Voitte injektoida mitä tahansa graafissa olevaa: repositoryja, käyttötapauksia ja jopa Modulen tarjoaman Room-tietokannan.
@HiltViewModel
class HomeViewModel @Inject constructor(
private val getUsers: GetUsersUseCase,
private val analytics: Analytics
) : ViewModel()Application Contextin injektointi
Tarvitsetteko kontekstin? Injektoikaa määritetty sovelluskonteksti annotaatiolla @ApplicationContext.
@HiltViewModel
class PrefsViewModel @Inject constructor(
@ApplicationContext private val context: Context
) : ViewModel()SavedStateHandle
Hilt tarjoaa automaattisesti SavedStateHandle-olion, joka välittää navigaatioargumentit ja säilyy prosessin kuollessa.
@HiltViewModel
class DetailViewModel @Inject constructor(
handle: SavedStateHandle
) : ViewModel() {
val id: Int = handle.get<Int>("id") ?: 0
}Koko kytkentä
Alusta loppuun: Module tarjoaa repositorion → Hilt injektoi sen ViewModeliin → Compose hakee ViewModelin käyttämällä hiltViewModel()-funktiota. Manuaalisia factoryja ei tarvita missään vaiheessa.
Ei manuaalista factory-koodia
Ilman Hiltiä joutuisitte kirjoittamaan mukautetun ViewModelProvider.Factory-factoryn jokaiselle ViewModelille, joka tarvitsee konstruktoriparametreja. @HiltViewModel poistaa kaiken tämän.
Kokonaisuuden kokoaminen
Teillä on nyt käytössänne nykyaikainen kokonaisuus: ViewModel ja elinkaaritietoinen tila, Room-persistenssi sekä korutiinit ja Flow, kaikki Hilt-DI:llä yhdistettynä.
Pikatarkistus
Testatkaa, miten hyvin ymmärrätte ViewModelien injektointia.
Kertaus
Opitte seuraavat asiat:
@HiltViewModelja@Inject-konstruktori antavat Hiltin rakentaa ViewModelit.- Hakekaa ne Composessa käyttämällä
hiltViewModel()-funktiota@AndroidEntryPoint-isännän sisällä. - Injektoikaa repositoryja,
@ApplicationContextjaSavedStateHandle. - Manuaalisia factoryja ei tarvita.
Opi Kotlin tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 36
- Oppitunnit
- 152
Usein kysytyt kysymykset
Onko oppitunti ”Injektio ViewModeleihin” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Android Academy-oppimispolun 3 oppituntia, myös oppitunnin “Injektio ViewModeleihin”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Android Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Injektio ViewModeleihin”?
Käyttäkää @HiltViewModel-annotaatiota selkeään injektioon. Harjoittelet Android Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Android Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Android Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Injektio ViewModeleihin”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Android Academy-oppitunnilla?
Kyllä. Jokainen Android Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Miksi riippuvuusinjektiota käytetään?
- Hiltin käyttöönotto
- Moduulit ja providerit
- Injektio ViewModeleihin