Android Academy · Oppitunti

Injektio ViewModeleihin

Käyttäkää @HiltViewModel-annotaatiota selkeään injektioon.

Oppitunti 4/413 vaihetta

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:

  • @HiltViewModel ja @Inject-konstruktori antavat Hiltin rakentaa ViewModelit.
  • Hakekaa ne Composessa käyttämällä hiltViewModel()-funktiota @AndroidEntryPoint-isännän sisällä.
  • Injektoikaa repositoryja, @ApplicationContext ja SavedStateHandle.
  • Manuaalisia factoryja ei tarvita.
Aloita maksutta

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

  1. Miksi riippuvuusinjektiota käytetään?
  2. Hiltin käyttöönotto
  3. Moduulit ja providerit
  4. Injektio ViewModeleihin
← Takaisin: Android Academy