Hilt menyertakan ekstensi untuk menyediakan class dari library Jetpack lainnya. Saat ini, Hilt mendukung komponen Jetpack berikut:
ViewModel- Navigasi
- Compose
- WorkManager
Anda harus menambahkan dependensi Hilt untuk memanfaatkan integrasi ini. Untuk mengetahui informasi selengkapnya tentang menambahkan dependensi, lihat Injeksi dependensi dengan Hilt.
Menginjeksikan objek ViewModel dengan Hilt
Berikan ViewModel dengan menganotasinya
menggunakan @HiltViewModel dan menggunakan anotasi @Inject dalam konstruktor objek
ViewModel.
Kotlin
@HiltViewModel class ExampleViewModel @Inject constructor( private val savedStateHandle: SavedStateHandle, private val repository: ExampleRepository ) : ViewModel() { ... }
Java
@HiltViewModel public class ExampleViewModel extends ViewModel { private final ExampleRepository repository; private final SavedStateHandle savedStateHandle; @Inject ExampleViewModel( SavedStateHandle savedStateHandle, ExampleRepository repository) { this.savedStateHandle = savedStateHandle; this.repository = repository; } ... }
Kemudian, aktivitas atau fragmen yang dianotasi dengan @AndroidEntryPoint bisa
mendapatkan instance ViewModel seperti biasa menggunakan ekstensi KTX ViewModelProvider atau
by viewModels():
Kotlin
@AndroidEntryPoint class ExampleActivity : AppCompatActivity() { private val exampleViewModel: ExampleViewModel by viewModels() ... }
Java
@AndroidEntryPoint public class ExampleActivity extends AppCompatActivity { private ExampleViewModel exampleViewModel; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); exampleViewModel = new ViewModelProvider(this).get(ExampleViewModel.class); } ... }
@ViewModelScoped
Semua ViewModel Hilt disediakan oleh ViewModelComponent yang mengikuti
siklus proses yang sama dengan ViewModel, dan dengan demikian, dapat bertahan saat terjadi perubahan konfigurasi.
Untuk mencakup dependensi ke ViewModel, gunakan anotasi @ViewModelScoped.
Jenis @ViewModelScoped akan menjadikannya agar satu instance dari jenis
cakupan diberikan di semua dependensi yang dimasukkan ke dalam ViewModel.
Instance ViewModel lain yang meminta instance dengan cakupan akan menerima
instance yang berbeda.
Jika satu instance perlu dibagikan ke berbagai ViewModel, instance
harus dicakup menggunakan @ActivityRetainedScoped atau @Singleton.
Integrasi dengan library navigasi Jetpack
Tambahkan dependensi tambahan berikut ke file Gradle Anda:
app/build.gradle
Groovy
dependencies { ... implementation 'androidx.hilt:hilt-navigation-fragment:1.0.0' }
Kotlin
dependencies { ... implementation("androidx.hilt:hilt-navigation-fragment:1.0.0") }
Jika ViewModel disertakan ke grafik
navigasi,
gunakan fungsi hiltNavGraphViewModels yang dapat digunakan dengan fragmen yang
dianotasi dengan @AndroidEntryPoint.
Kotlin
val viewModel: ExampleViewModel by hiltNavGraphViewModels(R.id.my_graph)
Java
NavBackStackEntry backStackEntry = navController.getBackStackEntry(R.id.my_graph); ExampleViewModel exampleViewModel = new ViewModelProvider( backStackEntry, HiltViewModelFactory.create(context, backStackEntry) ).get(ExampleViewModel.class)
Integrasi dengan Jetpack Compose
Untuk melihat cara Hilt berintegrasi dengan Jetpack Compose, lihat bagian Hilt Compose dan library lainnya.
Menginjeksikan WorkManager dengan Hilt
Tambahkan dependensi tambahan berikut ke file Gradle Anda. Perhatikan bahwa selain library, Anda juga perlu menyertakan pemroses anotasi tambahan yang berfungsi mendukung pemroses anotasi Hilt:
app/build.gradle
Groovy
dependencies { ... implementation 'androidx.hilt:hilt-work:1.0.0' // When using Kotlin. kapt 'androidx.hilt:hilt-compiler:1.0.0' // When using Java. annotationProcessor 'androidx.hilt:hilt-compiler:1.0.0' }
Kotlin
dependencies { implementation("androidx.hilt:hilt-work:1.0.0") // When using Kotlin. kapt("androidx.hilt:hilt-compiler:1.0.0") // When using Java. annotationProcessor("androidx.hilt:hilt-compiler:1.0.0") }
Injeksikan Worker menggunakan
anotasi @HiltWorker di class dan @AssistedInject di konstruktor objek
Worker. Anda hanya dapat
menggunakan @Singleton atau binding tidak tercakup dalam
objek Worker. Anda juga harus menganotasi dependensi Context dan WorkerParameters
dengan @Assisted:
Kotlin
@HiltWorker class ExampleWorker @AssistedInject constructor( @Assisted appContext: Context, @Assisted workerParams: WorkerParameters, workerDependency: WorkerDependency ) : Worker(appContext, workerParams) { ... }
Java
@HiltWorker public class ExampleWorker extends Worker { private final WorkerDependency workerDependency; @AssistedInject ExampleWorker( @Assisted @NonNull Context context, @Assisted @NonNull WorkerParameters params, WorkerDependency workerDependency ) { super(context, params); this.workerDependency = workerDependency; } ... }
Kemudian, minta class Application Anda
mengimplementasikan antarmuka Configuration.Provider, memasukkan instance HiltWorkFactory, dan meneruskannya ke dalam konfigurasi
WorkManager sebagai berikut:
Kotlin
@HiltAndroidApp class ExampleApplication : Application(), Configuration.Provider { @Inject lateinit var workerFactory: HiltWorkerFactory override fun getWorkManagerConfiguration() = Configuration.Builder() .setWorkerFactory(workerFactory) .build() }
Java
@HiltAndroidApp public class ExampleApplication extends Application implements Configuration.Provider { @Inject HiltWorkerFactory workerFactory; @Override public Configuration getWorkManagerConfiguration() { return new Configuration.Builder() .setWorkerFactory(workerFactory) .build(); } }