0Pricing
Android Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 依存性注入を使う理由
  2. Hiltを設定する
  3. モジュールとプロバイダー
  4. ViewModelに注入する
← Android Academyに戻る