Wstrzykiwanie do ViewModel
Używaj @HiltViewModel, aby zachować przejrzystość wstrzykiwania
Wstrzykiwanie do ViewModel to bezpłatna lekcja Android Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Android Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Android Academy zawiera 4 lekcji w sumie.
Wstrzykiwanie ViewModels za pomocą Hilt
ViewModels są wyjątkowe: framework tworzy ich instancje za pomocą fabryki. Hilt integruje się z tym mechanizmem dzięki adnotacji @HiltViewModel.
Adnotowanie ViewModel
Oznacz ViewModel adnotacją @HiltViewModel, a jego konstruktor adnotacją @Inject.
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
@HiltViewModel
class UserViewModel @Inject constructor(
private val repo: UserRepository
) : ViewModel()Co zapewnia Hilt
Hilt wyszukuje każdy parametr konstruktora w grafie zależności. Jeśli tylko UserRepository jest powiązane (przez moduł lub wstrzykiwanie przez konstruktor), Hilt dostarczy je automatycznie.
Pobieranie ViewModel w Compose
Użyj hiltViewModel() wewnątrz obiektu Composable, aby uzyskać ViewModel dostarczany przez Hilt.
import androidx.hilt.navigation.compose.hiltViewModel
@Composable
fun UserScreen(
vm: UserViewModel = hiltViewModel()
) {
val state by vm.uiState
.collectAsStateWithLifecycle()
}Host musi być punktem wejścia
Aby hiltViewModel() działało, hostująca Activity musi mieć adnotację @AndroidEntryPoint. Łączy to Compose z grafem Hilt.
@AndroidEntryPoint
class MainActivity : ComponentActivity()Wstrzykiwanie innych zależności
Możesz wstrzyknąć dowolny element znajdujący się w grafie: repozytoria, przypadki użycia, a nawet bazę danych Room dostarczaną przez moduł.
@HiltViewModel
class HomeViewModel @Inject constructor(
private val getUsers: GetUsersUseCase,
private val analytics: Analytics
) : ViewModel()Wstrzykiwanie kontekstu aplikacji
Potrzebujesz kontekstu? Wstrzyknij kontekst aplikacji z odpowiednim kwalifikatorem, używając @ApplicationContext.
@HiltViewModel
class PrefsViewModel @Inject constructor(
@ApplicationContext private val context: Context
) : ViewModel()SavedStateHandle
Hilt automatycznie dostarcza SavedStateHandle, który przechowuje argumenty nawigacji i przetrwa zakończenie procesu.
@HiltViewModel
class DetailViewModel @Inject constructor(
handle: SavedStateHandle
) : ViewModel() {
val id: Int = handle.get<Int>("id") ?: 0
}Pełne połączenie elementów
Od początku do końca: moduł dostarcza repozytorium → Hilt wstrzykuje je do ViewModel → Compose pobiera ViewModel za pomocą hiltViewModel(). Nie są potrzebne żadne ręczne fabryki.
Bez ręcznego kodu fabryki
Bez Hilt trzeba byłoby napisać własny kod ViewModelProvider.Factory dla każdego ViewModel, który wymaga argumentów konstruktora. @HiltViewModel eliminuje całą tę pracę.
Połączenie wszystkich elementów ścieżki
Masz teraz do dyspozycji kompletny, nowoczesny stos: ViewModel i stan uwzględniający cykl życia, trwałość danych w Room, korutyny i Flow, a wszystko połączone za pomocą Hilt DI.
Szybki sprawdzian
Sprawdź swoją wiedzę na temat wstrzykiwania ViewModels.
Podsumowanie
Dowiedziałeś się, że:
- Konstruktor z adnotacjami
@HiltViewModeli@Injectpozwala Hilt tworzyć ViewModels. - W Compose pobierasz je za pomocą
hiltViewModel()wewnątrz hosta z adnotacją@AndroidEntryPoint. - Możesz wstrzykiwać repozytoria,
@ApplicationContextiSavedStateHandle. - Ręczne fabryki nie są potrzebne.
Często zadawane pytania
Czy lekcja „Wstrzykiwanie do ViewModel” jest bezpłatna?
Tak — pełny tekst „Wstrzykiwanie do ViewModel” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Android Academy, przejdź na CoddyKit PRO. Kurs Android Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Wstrzykiwanie do ViewModel”?
Używaj @HiltViewModel, aby zachować przejrzystość wstrzykiwania Ćwiczysz Android Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Android Academy?
Nie wymagamy żadnego doświadczenia. Android Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Wstrzykiwanie do ViewModel”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Android Academy?
Tak. Każda lekcja Android Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Dlaczego warto stosować wstrzykiwanie zależności?
- Konfigurowanie Hilt
- Moduły i dostawcy
- Wstrzykiwanie do ViewModel