ViewModelに注入する
@HiltViewModelで整理されたインジェクションを使います
「ViewModelに注入する」はCoddyKit上の無料Android Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAndroid Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Android Academyコースには全4レッスンが含まれています。
Hilt で ViewModel に注入する
ViewModel は特殊です。フレームワークがファクトリを介してインスタンス化するためです。Hilt は @HiltViewModel アノテーションを通じてこの仕組みに統合されます。
ViewModel にアノテーションを付ける
ViewModel に @HiltViewModel を付け、コンストラクタに @Inject のアノテーションを付けます。
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
@HiltViewModel
class UserViewModel @Inject constructor(
private val repo: UserRepository
) : ViewModel()Hilt が提供するもの
Hilt は各コンストラクタパラメータを依存関係グラフから検索します。UserRepository がモジュールまたはコンストラクタ注入によってバインドされていれば、Hilt が自動的に提供します。
Compose で取得する
Composable 内で hiltViewModel() を使用すると、Hilt が提供する ViewModel を取得できます。
import androidx.hilt.navigation.compose.hiltViewModel
@Composable
fun UserScreen(
vm: UserViewModel = hiltViewModel()
) {
val state by vm.uiState
.collectAsStateWithLifecycle()
}ホストはエントリポイントである必要がある
hiltViewModel() を動作させるには、ホストとなる Activity に @AndroidEntryPoint のアノテーションを付ける必要があります。これにより Compose が Hilt グラフに接続されます。
@AndroidEntryPoint
class MainActivity : ComponentActivity()その他の依存関係を注入する
グラフに含まれるものなら何でも注入できます。リポジトリやユースケース、モジュールから提供される Room データベースも対象です。
@HiltViewModel
class HomeViewModel @Inject constructor(
private val getUsers: GetUsersUseCase,
private val analytics: Analytics
) : ViewModel()Application Context を注入する
Context が必要ですか?@ApplicationContext を使って、修飾されたアプリケーションコンテキストを注入します。
@HiltViewModel
class PrefsViewModel @Inject constructor(
@ApplicationContext private val context: Context
) : ViewModel()SavedStateHandle
Hilt は SavedStateHandle を自動的に提供します。これにはナビゲーション引数が保持され、プロセスが終了しても維持されます。
@HiltViewModel
class DetailViewModel @Inject constructor(
handle: SavedStateHandle
) : ViewModel() {
val id: Int = handle.get<Int>("id") ?: 0
}完全な接続
最初から最後までの流れは次のとおりです:モジュールがリポジトリを提供 → Hilt が ViewModel に注入 → Compose が hiltViewModel() で ViewModel を取得します。手動のファクトリは必要ありません。
手動のファクトリコードは不要
Hilt がない場合、コンストラクタ引数を必要とする ViewModel ごとにカスタム ViewModelProvider.Factory を作成する必要があります。@HiltViewModel がその作業をすべて不要にします。
トラック全体をつなげる
これで、最新の構成要素がそろいました。ViewModel とライフサイクル対応の状態、Room による永続化、コルーチンと Flow のすべてが Hilt DI で接続されています。
クイックチェック
ViewModel への注入について理解度を確認しましょう。
まとめ
学んだこと:
@HiltViewModelと@Injectを付けたコンストラクタにより、Hilt が ViewModel を構築できます。@AndroidEntryPointを付けたホスト内でhiltViewModel()を使い、Compose から取得します。- リポジトリ、
@ApplicationContext、SavedStateHandleを注入できます。 - 手動のファクトリは必要ありません。
よくある質問
「ViewModelに注入する」レッスンは無料ですか?
はい。「ViewModelに注入する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Android Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Android Academyコースには全4レッスンが含まれています。
「ViewModelに注入する」で何を学びますか?
@HiltViewModelで整理されたインジェクションを使います ブラウザで直接実行するハンズオンコードでAndroid Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Android Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAndroid Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「ViewModelに注入する」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAndroid Academyレッスンでコードを書いて実行できますか?
はい。すべてのAndroid Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 依存性注入を使う理由
- Hiltを設定する
- モジュールとプロバイダー
- ViewModelに注入する